Docker是什么?
“Docker”一词指代了多个概念,包括开源社区项目、开源项目使用的工具、主导支持此类项目的公司 Docker Inc.,以及该公司官方支持的工具。这些技术和公司的同名可能会造成混淆。
以下简要说明 Docker 以便区分:
- IT 软件”Docker”是支持创建和使用 Linux® 容器的容器化技术。
- 开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。
- Docker Inc. 公司凭借 Docker 社区产品起家,主要负责提升社区版本的安全性,并将技术进步与广大技术社区分享。此外,它还专门对这些技术产品进行完善和安全固化,以服务于企业客户。
- 借助 Docker,您可将容器当做轻巧、模块化的虚拟机来使用。同时,您还将获得高度灵活性,实现对容器的高效创建、部署及复制,并在环境之间迁移它们,从而有助于您针对云来优化应用。
镜像管理
搜索镜像
拉取镜像
查看本地镜像
1 2 3 4 5
| docker images docker image ls docker images -q 只列出镜像的id docker images --format “{{.ID}}--{{.Repository}}” 格式化显示镜像 docker images --format “ table {{.ID}}\t{{.Repository}}\t{{.Tag}}" 以表格形式显示
|
删除镜像
1 2 3
| docker rmi 镜像id 批量删除镜像 docker rmi `docker images -qa`
|
导入镜像
1 2 3 4
| #导入打包后的镜像 docker image load -i /opt/centos7.8.2003.tar #导入打包压缩后的镜像 zstd -dc /opt/centos-stream9.tar.zst | docker image load
|
导出镜像
1 2 3 4 5 6
| #打包 docker image save centos-stream9:cs9 > /opt/centos-stream9.tar #打包并压缩 docker image save centos-stream9:cs9 | zstd -o /opt/centos-stream9.tar.zst
#注意:打包时会占用临时空间
|
查看镜像详细信息
1
| docker image inspect 镜像id
|
查看一个镜像的历史
1 2 3 4 5 6
| docker history [OPTIONS] IMAGE
#OPTIONS --no-trunc:显示完整命令(默认会截断长命令) -q:只显示镜像 ID --format:自定义输出格式(比如只关心大小)
|
容器管理
启动容器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| docker run -p 85:80 nginx //容器的端口映射85是宿主机的端口,80是容器的端口 docker run -p 0.0.0.0:85:80 nginx #只做ipv4地址端口映射 docker run -P nginx 随机端口映射 docker run - it --rm -d --name test --ip 192.168.159.152 容器id/名字 bash/sh -i 交互式命令操作 -t 开启一个终端 bash 在进入容器后执行的命令 //其实就相当于shell解释器 --rm 容器挂了后自动删除容器记录 -d 在后台运行 --name test 给容器起一个名字叫test --restart=always //容器挂了后自动重启 --net //网桥名字 --ip //分配容器的ip --cups=0.5 //限制cpu的使用率 --privileged=true //表示启用容器的超级权限,启用超级权限的时候需要以/usr/sbin/init命令启动不然超级权限不会生效
|
注意事项:
docker run 等于创建加启动,如果镜像不存在在本地则会去下载镜像
容器内的进程必须处于前台运行状态,否则容器会直接退出
如果容器内,什么事也不做,容器也会挂掉,容器内,必须有一个进程在前台运行,//例如docker run nginx 容器会直接挂掉
进入容器
1
| docker exec -it 容器id bash //进入正在运行的容器
|
查看运行的容器
查看停止的容器
容器的重启、停止、启动
1
| docker restart/stop/start 容器id
|
查看容器的详细信息
1
| docker container inspect 容器id
|
查看容器端口转发情况
查看容器内进程信息
查看容器内资源
查看容器的具体信息
传输本地文件到容器中
1
| docker cp 本地文件路径 容器ID:容器中的存储路径
|
传输容器中的文件到本地
1
| docker cp 容器ID:容器中的路径 本地存储路径
|
退出容器
只删除容器,volume保留
1 2 3
| docker rm 容器id #强制删除容器 docker rm -f 容器id
|
阻塞容器
1 2
| #用于阻塞docker容器,并在容器退出是打印退出码,当容器不在运行的时候,直接输出0;可以用来监控容器是否正常退出 docke wait 容器ID/容器名字
|
删除容器,同时删除volume
1 2
| docker rm -v 容器ID docker rm --volumes 容器ID
|
查看容器资源使用情况
1
| docker stats <container_name_or_id>
|
容器打包成镜像
1 2 3 4 5 6 7 8
| docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a 'LML' -m 'This is a container image' 容器ID 容器打包后的镜像名字:标签 Option 功能 -a 指定新镜像作者 -c 使用 Dockerfile 指令来创建镜像 -m 提交生成镜像的说明信息 -p 在 commit 时,将容器暂停|
|
容器打包成tar包
1 2 3
| docker save -o tar包名称.tar 待打包镜像名称:待打包镜像版本 演示: docker save -o mysql-lml-docker.tar mysql-lml-docker:v1.0
|
tar包载入镜像
1 2 3
| docker load [OPTIONS] tar包名称.tar 演示: docker load -i mysql-lml-docker.tar
|
日志管理
查看容器日志
1 2 3 4
| 所有日志 docker logs 容器id 相当于tail -f,实时的刷新日志 docker logs -f 容器id
|
网络管理
列出所有网桥
查看网络信息
1
| docker network inspect 网络类型
|
创建新的网桥
1
| docker network create --subnet=192.168.159.0/24 NetTest
|
删除创建的网桥
1
| docker network rm net_name
|
将容器加入自建网络中
1
| docker network connect 网络名称 容器名称
|
将容器退出自建网络中
1
| docker network disconnect 网络名称 容器名称
|
命名卷管理
列出所有的volume
删除未使用的volume
查看volume信息
1
| docker volume inspect 命名卷名字
|
删除volume
创建volume
1
| docker volume create 命名卷名字
|
进阶命令
查看所有的容器和镜像大小
回收悬空的镜像
删除所有已停用的容器
回收孤儿卷(无容器使用)
批量删除(网络,数据卷,镜像…)
1 2 3
| docker system prune # 仅中间层 + 停止容器 docker system prune -a # 再加“无用”镜像 docker system prune -a --volumes # 连无用卷一起
|
启停全部容器
1
| docker stop/start $(docker ps -aq -f "status=running/exited/created/paused")
|