干货精选:提升效率的 30+ 个高频 Docker 命令详解

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(默认)、hostnone 或自定义网络
  • -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

  • 作用: 在运行中的容器内执行命令或启动新的进程。
  • 示例:
    docker exec -it my_container /bin/bash
    
    这会进入容器的交互式 Shell 环境。
  • 常见用法: 进入容器进行调试、查看日志文件或执行一些临时操作。

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 /newfileC /etc/passwdD /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 | -
    
  • 示例:
    docker build -t my_image:latest .
    
    该命令会读取当前目录下的 Dockerfile,并将构建好的镜像命名为 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 过程中,以下几点需要注意:

  1. 权限管理: 一般需要使用 sudo 或将当前用户加入 docker 组。
  2. 版本更新: 不同版本的 Docker 可能有细微的参数或行为差异,请关注官方文档。
  3. 资源限制: 生产环境中必须配置好 CPU、内存、网络等方面的限制,以避免容器无限制使用宿主机资源。
  4. 日志清理: 长期运行容器的日志文件可能会很大,需要定期清理或配置合适的日志驱动。
  5. 安全性: 注意容器和宿主机的隔离,不要对容器赋予过多特权,最小化攻击面。

掌握并熟练运用这些命令,可以极大地提高在容器化场景下开发、运维和部署的效率。更多高级特性如 Docker Compose、Swarm、Kubernetes 等,需要在理解以上命令的基础上进一步学习与实践。


参考:
0voice · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值