Docker 常用命令
在学习 Docker 命令之前,建议先了解 Docker 的基本概念和核心架构,如镜像(Image)、容器(Container)和仓库(Registry)等。本文通过命令分类的方式,结合实际使用案例来介绍常见的 Docker 命令。
官方文档
- 地址: https://docs.docker.com/reference/
- 简述: Docker 官方文档提供了非常详尽的命令参考,以及 Docker 不同版本和子项目的使用说明。
- 建议: 在遇到问题或者需要查询更详细的命令用法时,可以随时查看官方文档以获取最新最权威的资料。
一、环境信息命令
环境信息命令通常用来查看 Docker 的版本、配置信息以及当前主机的相关信息。
1. docker info
- 作用: 查看当前 Docker 的系统级信息,如 Docker 的存储驱动、运行容器数量、镜像数量、服务器内核信息等。
- 示例:
docker info
- 常见输出信息:
- Server Version: Docker 服务器版本
- Storage Driver: 使用的存储驱动(如 overlay2)
- Logging Driver: 日志驱动(如 json-file)
- Cgroup Driver: Cgroup 使用的驱动类型
- Runtime: 运行时(如 runc)
- Kernel Version: 宿主机内核版本
- Operating System: 宿主机操作系统信息
2. docker version
- 作用: 显示 Docker 客户端和服务端的版本信息,包括版本号、Git 提交号、构建时间等。
- 示例:
docker version
- 常见输出信息:
- Client: Docker 客户端的版本、API 版本、Go 语言版本等
- Server: Docker 服务端(Docker Engine)的版本、API 版本、Go 语言版本等
二、系统日志信息命令
这些命令有助于我们查看 Docker 的事件日志、容器运行日志和镜像历史等。
1. docker events
- 作用: 实时监听 Docker 守护进程的事件。包括容器的创建、启动、停止、删除,镜像的 pull、push 等操作的事件。
- 常见用法:
可以配合docker events
--since
、--until
参数来指定时间范围。
2. docker logs
- 作用: 查看容器的标准输出(stdout)和标准错误输出(stderr)。
- 常见用法:
docker logs [OPTIONS] <container>
-f
: 实时跟随日志--tail
: 仅显示最新若干行日志-t
: 显示时间戳
3. docker history
- 作用: 查看某个镜像的构建历史,包括各层镜像的创建指令、创建时间、镜像大小等。
- 示例:
docker history <image>
- 常见场景: 当我们想了解某个镜像是如何被分层构建时,可以使用此命令来追踪其构建过程。
三、容器生命周期管理命令
这一类命令涵盖了容器从创建到销毁的全过程,包括启动、停止、重启、删除,以及各种选项的使用。
1. docker create
- 作用: 根据指定的镜像创建一个处于“已停止”状态的容器,但并不自动启动它。
- 示例:
docker create --name my_container ubuntu:latest
- 使用场景: 如果我们只想提前创建容器,但暂时不启动,可以使用此命令。启动时再执行
docker start
。
2. docker run
- 作用: 创建并启动容器。它是使用最频繁的命令之一。
- 基本格式:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
- 示例:
该示例会以交互模式启动一个名为docker run -it --name test_container ubuntu:latest /bin/bash
test_container
的容器,并在容器内执行/bin/bash
命令。
常用选项
1)系统选项
-d
: 后台运行容器并返回容器 ID(Detached 模式)-it
: 结合使用-i
(交互式)和-t
(分配伪 TTY),常用于执行交互式的命令行操作--rm
: 容器停止后自动删除容器文件系统
2)网络选项
--network
: 指定网络模式,例如bridge
(默认)、host
、none
或自定义网络-p
/--publish
: 将容器内端口映射到宿主机端口,如-p 80:80
--expose
: 暴露容器内端口,但不自动映射到宿主机
3)健康检查
--health-cmd
: 定义健康检查的命令--health-interval
: 健康检查间隔(默认 30s)--health-retries
: 健康检查失败重试次数- 意义: 让外部知道容器内部服务状态是否正常,例如在使用容器编排时可更好地进行容器调度。
4)命名空间选项
Docker 利用 Linux 的命名空间技术(Namespaces)来隔离容器与宿主机以及容器之间的资源。常见命名空间包括 PID、NET、IPC、UTS、MNT 等。
--pid
: 指定容器和宿主机或其他容器共享进程命名空间--network=host
: 与宿主机共享网络命名空间
5)cgroup 资源限制选项
通过 cgroup(control groups)来限制容器对宿主机资源的使用。
CPU
--cpus
: 限制容器使用的 CPU 核数,例如--cpus="2"
表示最多使用 2 个 CPU 内核--cpu-shares
: 相对 CPU 权重,默认值为 1024
CPUset
--cpuset-cpus
: 指定容器能使用哪些 CPU 核,例如--cpuset-cpus="0,1"
device
--device
: 允许容器访问宿主机的某些设备,如 GPU 设备- 用于 GPU 加速场景,或者需要宿主机特定硬件支持的情况。
memory
-m
/--memory
: 限制容器可使用的最大内存,例如--memory="512m"
--memory-swap
: 内存 + swap 的最大值
6)Ubuntu 系统开启内核支持
- 简介: 在使用 Docker 的一些高级特性,如一些网络或 cgroup 特性时,需要确保 Ubuntu 主机系统的内核已启用相关功能。
- 注意: 可能需要修改
/etc/default/grub
或者加载特定内核模块来支持相应特性。
3. docker start/stop/restart
- 作用: 分别用于启动、停止和重启已存在的容器。
- 示例:
docker start my_container docker stop my_container docker restart my_container
- 说明:
docker stop
会发送SIGTERM
信号给容器内主进程,并在超时后发送SIGKILL
。而docker kill
则直接发送SIGKILL
。
4. docker kill
- 作用: 直接向容器内主进程发送指定信号(默认
SIGKILL
),比docker stop
更粗暴。 - 示例:
docker kill my_container
- 使用场景: 容器进程无法正常响应
SIGTERM
时,可以使用kill
来强制停止。
5. docker rm
- 作用: 删除容器(必须是停止状态)。
- 示例:
docker rm my_container
- 注意: 如果想要在停止容器后自动删除,可在
docker run
时添加--rm
选项。
6. docker pause/unpause
- 作用:
pause
会暂停容器内所有进程(使用 cgroup freezer),unpause
则恢复。 - 示例:
docker pause my_container docker unpause my_container
- 使用场景: 当需要临时暂停容器执行,比如进行容器快照或调试时,可以使用此命令。
四、容器运维操作命令
这些命令帮助我们在容器运行过程中进行各种管理和调试操作。
1. docker exec
- 作用: 在运行中的容器内执行命令或启动新的进程。
- 示例:
这会进入容器的交互式 Shell 环境。docker exec -it my_container /bin/bash
- 常见用法: 进入容器进行调试、查看日志文件或执行一些临时操作。
2. docker ps
- 作用: 列出容器信息(默认只显示正在运行的容器)。
- 常见选项:
-a
: 显示所有容器(包括已停止)-q
: 只显示容器 ID--format
: 自定义输出格式
3. docker inspect
- 作用: 以 JSON 格式输出容器或镜像的底层信息,如网络配置、挂载、环境变量等。
- 示例:
docker inspect my_container docker inspect ubuntu:latest
- 使用场景: 对容器详细配置进行排查或获取容器 IP 地址时。
4. docker top
- 作用: 查看容器内进程列表。
- 示例:
docker top my_container
- 使用场景: 与 Linux 中的
top
类似,用于确认容器内运行的进程及其状态。
5. docker attach
- 作用: 附加到正在运行的容器的终端。
- 示例:
docker attach my_container
- 注意: 如果从 attach 命令退出(Ctrl + C),会导致容器停止(除非使用了后台模式或其他保活方式)。
6. docker wait
- 作用: 阻塞等待容器停止,并打印容器的退出状态码。
- 示例:
docker wait my_container
- 使用场景: 需要在脚本中根据容器退出码来执行后续逻辑时,可使用此命令。
7. docker export
- 作用: 将容器文件系统打包成一个
tar
包,不包含镜像层及元数据。 - 示例:
docker export my_container > my_container.tar
- 使用场景: 备份容器文件系统或迁移到其他环境时。
8. docker port
- 作用: 查看容器端口映射关系。
- 示例:
docker port my_container
- 输出: 显示容器的端口在宿主机上的映射,如
0.0.0.0:8080 -> 80/tcp
。
9. docker cp
- 作用: 在宿主机与容器之间复制文件或目录。
- 示例:
docker cp my_container:/path/file ./file docker cp ./file my_container:/path/file
- 使用场景: 需要从容器内拉取日志或配置文件,或者将宿主机文件拷贝到容器内。
10. docker diff
- 作用: 显示容器文件系统相对于镜像的改动,包括增加、修改和删除的文件。
- 示例:
docker diff my_container
- 输出: 类似
A /newfile
,C /etc/passwd
,D /tmp/oldfile
等标记。
11. docker rename
- 作用: 重命名容器。
- 示例:
docker rename old_name new_name
12. docker stats
- 作用: 以实时流方式显示容器的资源使用统计数据,包括 CPU、内存、网络、IO 等。
- 示例:
docker stats [container]
- 使用场景: 监控容器性能,排查高负载或资源消耗问题。
13. docker update
- 作用: 动态更新一个或多个容器的资源限制。
- 示例:
docker update --cpus=2 my_container
- 使用场景: 当需要在容器运行时临时调整资源限制,比如扩容或缩容。
五、镜像管理命令
镜像是 Docker 的核心组件之一。这些命令帮助我们构建、查看、删除、保存、加载、导入和提交镜像。
1. docker build
- 作用: 使用 Dockerfile 依据指定上下文构建一个新的镜像。
- 基本格式:
docker build [OPTIONS] PATH | URL | -
- 示例:
该命令会读取当前目录下的 Dockerfile,并将构建好的镜像命名为docker build -t my_image:latest .
my_image:latest
。
2. docker images
- 作用: 列出本地所有镜像信息。
- 常见选项:
-a
: 列出所有镜像(包括中间层)--filter
: 过滤输出结果--format
: 自定义输出格式
3. docker rmi
- 作用: 删除本地的一个或多个镜像(不能删除正被容器使用的镜像)。
- 示例:
docker rmi my_image
4. docker tag
- 作用: 给本地镜像打标签,通常用于在推送镜像到远程仓库之前进行重命名。
- 示例:
docker tag my_image:latest myrepo/my_image:v1.0
5. docker save
- 作用: 将镜像保存为一个
tar
包,包含所有镜像层及元数据。 - 示例:
docker save my_image:latest > my_image.tar
- 使用场景: 用于离线传输或备份镜像。
6. docker load
- 作用: 从
tar
包中加载镜像到本地镜像库。 - 示例:
docker load < my_image.tar
- 输出: 加载完成后会显示新镜像的 Repository、Tag、Image ID 等信息。
7. docker import
- 作用: 从容器的文件系统快照(通过
docker export
获得)创建一个镜像。 - 示例:
docker import my_container.tar new_image:latest
- 区别:
docker import
得到的镜像不含镜像历史和元数据;docker load
得到的则是完整的镜像信息。
8. docker commit
- 作用: 将容器的当前状态提交为一个新的镜像。
- 示例:
docker commit my_container my_new_image:latest
- 使用场景: 当在容器中进行了一系列修改并希望将其保存为新的镜像时。
六、镜像仓库命令
这些命令用于从 Docker Hub(或其他私有仓库)登录、拉取、上传和搜索镜像。
1. docker login/logout
- 作用: 登录或退出镜像仓库(默认为 Docker Hub)。
- 示例:
docker login docker logout
- 说明: 登录成功后才可推送到私有镜像仓库,或者访问受限资源。
2. docker pull
- 作用: 从镜像仓库拉取指定镜像到本地。
- 示例:
docker pull ubuntu:latest
- 使用场景: 获取公共镜像或私有仓库镜像。
3. docker push
- 作用: 将本地镜像推送到远程仓库(需要先登录)。
- 示例:
docker push myrepo/my_image:v1.0
- 注意: 推送之前,镜像必须打上远程仓库所需的标签(如
myrepo/my_image:v1.0
)。
4. docker search
- 作用: 在 Docker Hub 上搜索官方或社区镜像。
- 示例:
docker search ubuntu
- 输出: 显示镜像名称、描述、星级、是否官方等信息。
总结
以上按照大致的功能和使用场景对 Docker 命令做了分类介绍,从环境信息、日志信息、容器生命周期管理,到容器日常运维命令,再到镜像管理及镜像仓库相关操作。本篇文章涵盖了 Docker 日常使用中的核心命令,并对部分常用参数做了简要说明。
在实际使用 Docker 过程中,以下几点需要注意:
- 权限管理: 一般需要使用
sudo
或将当前用户加入docker
组。 - 版本更新: 不同版本的 Docker 可能有细微的参数或行为差异,请关注官方文档。
- 资源限制: 生产环境中必须配置好 CPU、内存、网络等方面的限制,以避免容器无限制使用宿主机资源。
- 日志清理: 长期运行容器的日志文件可能会很大,需要定期清理或配置合适的日志驱动。
- 安全性: 注意容器和宿主机的隔离,不要对容器赋予过多特权,最小化攻击面。
掌握并熟练运用这些命令,可以极大地提高在容器化场景下开发、运维和部署的效率。更多高级特性如 Docker Compose、Swarm、Kubernetes 等,需要在理解以上命令的基础上进一步学习与实践。
参考:
0voice · GitHub