Skip to content

Docker CLI 命令参考 ​

Docker CLI 是与 Docker 引擎交互的主要方式。本文将全面介绍 Docker 命令的分类、用法和最佳实践。

目录 ​

  1. 命令概览
  2. 镜像管理命令
  3. 容器管理命令
  4. 网络管理命令
  5. 卷管理命令
  6. 系统管理命令
  7. Docker Compose 命令
  8. Swarm 命令

命令概览 ​

1.1 命令结构 ​

bash
# 基本语法
docker [命令] [子命令] [选项] [参数]

# 示例
docker container run -d --name web -p 80:80 nginx:alpine

1.2 命令分类 ​

类别命令说明
镜像image镜像管理
容器container容器管理
网络network网络管理
卷volume卷管理
系统system系统管理
插件plugin插件管理
上下文context上下文管理
构建buildx构建扩展

1.3 全局选项 ​

bash
# 常用全局选项
docker [选项] 命令

  --config string      # 配置文件位置 (默认 ~/.docker)
  -c, --context string # 使用指定的上下文
  -D, --debug          # 启用调试模式
  -H, --host list      # 守护进程 socket
  -l, --log-level string # 日志级别 (debug/info/warn/error/fatal)
  --tls                # 使用 TLS
  --tlscacert string   # CA 证书路径
  --tlscert string     # TLS 证书路径
  --tlskey string      # TLS 密钥路径
  --tlsverify          # 使用 TLS 并验证远程
  -v, --version        # 显示版本

镜像管理命令 ​

2.1 镜像基础操作 ​

bash
# 搜索镜像
docker search nginx
docker search --filter stars=100 nginx
docker search --filter is-official=true nginx

# 拉取镜像
docker pull nginx:latest
docker pull nginx:alpine
docker pull registry.example.com/myapp:v1.0

# 列出镜像
docker images
docker image ls
docker image ls --filter dangling=true
docker image ls --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"

# 查看镜像详情
docker inspect nginx:alpine
docker image inspect nginx:alpine --format='{{ .Size }}'
docker image inspect nginx:alpine --format='{{ .Config.Env }}'

# 查看镜像历史
docker history nginx:alpine
docker history --no-trunc nginx:alpine

# 标记镜像
docker tag nginx:alpine myregistry/nginx:alpine
docker tag myapp:1.0 myapp:latest

# 推送镜像
docker push myregistry/nginx:alpine
docker push myregistry/myapp:1.0

# 删除镜像
docker rmi nginx:alpine
docker image rm nginx:alpine
docker image prune          # 删除悬空镜像
docker image prune -a       # 删除所有未使用镜像

# 导出/导入镜像
docker save -o nginx.tar nginx:alpine
docker load -i nginx.tar

# 构建镜像
docker build -t myapp:1.0 .
docker build -t myapp:1.0 -f Dockerfile.prod .
docker build --no-cache -t myapp:1.0 .
docker build --build-arg VERSION=1.0 -t myapp:1.0 .

2.2 镜像高级操作 ​

bash
# 查看镜像层
docker image inspect nginx:alpine --format='{{range .RootFS.Layers}}{{.}}\n{{end}}'

# 复制镜像到另一个仓库
docker pull nginx:alpine
docker tag nginx:alpine myregistry/nginx:alpine
docker push myregistry/nginx:alpine

# 清理未使用镜像
docker image prune -f
docker image prune --filter "until=24h"
docker image prune --filter "label=app=myapp"

# 查看镜像磁盘使用
docker system df -v

容器管理命令 ​

3.1 容器生命周期 ​

bash
# 创建容器
docker create --name web nginx:alpine

# 启动容器
docker start web
docker start -a web  # 附加输出

# 运行容器(创建并启动)
docker run -d --name web -p 80:80 nginx:alpine
docker run -it --name ubuntu ubuntu:22.04 bash
docker run --rm alpine echo "Hello World"

# 停止容器
docker stop web
docker stop -t 30 web  # 等待 30 秒后强制停止

# 重启容器
docker restart web

# 暂停/恢复容器
docker pause web
docker unpause web

# 删除容器
docker rm web
docker rm -f web       # 强制删除运行中的容器
docker rm -v web       # 同时删除关联卷
docker container prune # 删除所有停止的容器

# 等待容器
docker wait web  # 返回退出码

3.2 容器运行选项 ​

bash
# 基本选项
docker run [选项] 镜像 [命令]

  -d, --detach            # 后台运行
  -i, --interactive       # 保持 STDIN 打开
  -t, --tty               # 分配伪终端
  --rm                    # 停止后自动删除
  --name string           # 容器名称
  -p, --publish list      # 端口映射
  -P, --publish-all       # 暴露所有端口
  -v, --volume list       # 挂载卷
  --mount mount           # 高级挂载
  -e, --env list          # 环境变量
  --env-file list         # 环境变量文件
  --network string        # 连接网络
  --link list             # 链接到其他容器
  -h, --hostname string   # 主机名
  --add-host list         # 添加主机映射
  --dns list              # DNS 服务器
  --dns-search list       # DNS 搜索域
  --restart string        # 重启策略
  --memory bytes          # 内存限制
  --cpus decimal          # CPU 限制
  --read-only             # 只读根文件系统
  --user string           # 运行用户
  --cap-add list          # 添加能力
  --cap-drop list         # 删除能力
  --security-opt list     # 安全选项
  --privileged            # 特权模式
  --device list           # 添加设备
  --log-driver string     # 日志驱动
  --log-opt list          # 日志选项
  --health-cmd string     # 健康检查命令
  --health-interval duration # 检查间隔
  --health-timeout duration  # 超时时间
  --health-retries int    # 重试次数
  --init                  # 使用 init 进程

3.3 容器信息查看 ​

bash
# 列出容器
docker ps                    # 运行中的容器
docker ps -a                 # 所有容器
docker ps -q                 # 只显示 ID
docker ps -l                 # 最新创建的容器
docker ps -s                 # 显示大小
docker ps --filter status=exited
docker ps --filter name=web
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

# 查看容器详情
docker inspect web
docker inspect web --format='{{ .NetworkSettings.IPAddress }}'
docker inspect web --format='{{ .State.Status }}'
docker inspect web --format='{{range .Mounts}}{{.Source}} -> {{.Destination}}\n{{end}}'

# 查看容器日志
docker logs web
docker logs -f web           # 实时跟踪
docker logs --tail 100 web   # 最后 100 行
docker logs --since 10m web  # 最近 10 分钟
docker logs -t web           # 显示时间戳

# 查看容器进程
docker top web
docker top web -aux

# 查看容器资源使用
docker stats
docker stats web
docker stats --no-stream     # 只显示一次
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# 查看容器端口映射
docker port web
docker port web 80

# 查看容器变更
docker diff web

3.4 容器操作 ​

bash
# 进入运行中的容器
docker exec -it web bash
docker exec -it web sh
docker exec -u root -it web bash

# 在容器中执行命令
docker exec web ps aux
docker exec -d web touch /tmp/file  # 后台执行

# 附加到容器
docker attach web
# Ctrl+P, Ctrl+Q 分离

# 复制文件
docker cp web:/etc/nginx/nginx.conf ./nginx.conf
docker cp ./html web:/usr/share/nginx/

# 导出容器
docker export -o web.tar web

# 从导出文件创建镜像
docker import web.tar web:imported

# 提交容器为新镜像
docker commit web myweb:v1.0
docker commit -a "Author" -m "Message" web myweb:v1.0

# 查看容器事件
docker events
docker events --filter event=start
docker events --filter container=web

# 发送信号
docker kill web              # SIGKILL
docker kill -s HUP web       # SIGHUP

网络管理命令 ​

4.1 网络基础操作 ​

bash
# 列出网络
docker network ls
docker network ls --filter driver=bridge
docker network ls --format "table {{.Name}}\t{{.Driver}}\t{{.Scope}}"

# 创建网络
docker network create my-network
docker network create --driver bridge my-bridge
docker network create --driver overlay my-overlay
docker network create --subnet 172.20.0.0/16 --gateway 172.20.0.1 my-network

# 查看网络详情
docker network inspect my-network
docker network inspect my-network --format='{{range .Containers}}{{.Name}} {{end}}'

# 连接容器到网络
docker network connect my-network web
docker network connect --alias db my-network postgres

# 断开容器网络连接
docker network disconnect my-network web

# 删除网络
docker network rm my-network
docker network prune           # 删除未使用的网络

4.2 网络高级操作 ​

bash
# 创建具有特定配置的网络
docker network create \
  --driver bridge \
  --subnet 192.168.100.0/24 \
  --gateway 192.168.100.1 \
  --ip-range 192.168.100.128/25 \
  --opt com.docker.network.bridge.name=my-bridge \
  --opt com.docker.network.bridge.enable_icc=false \
  --opt com.docker.network.bridge.enable_ip_masquerade=true \
  --label environment=production \
  prod-network

# 在特定网络中运行容器
docker run -d --name web --network my-network nginx:alpine

# 容器连接到多个网络
docker network create frontend
docker network create backend
docker run -d --name app --network frontend nginx:alpine
docker network connect backend app

卷管理命令 ​

5.1 卷基础操作 ​

bash
# 列出卷
docker volume ls
docker volume ls --filter dangling=true
docker volume ls --filter driver=local

# 创建卷
docker volume create my-volume
docker volume create --driver local my-volume
docker volume create --label env=prod my-volume

# 查看卷详情
docker volume inspect my-volume
docker volume inspect my-volume --format='{{ .Mountpoint }}'

# 删除卷
docker volume rm my-volume
docker volume prune            # 删除未使用的卷

# 使用卷运行容器
docker run -d -v my-volume:/data nginx:alpine
docker run -d --mount source=my-volume,target=/data nginx:alpine

5.2 卷高级操作 ​

bash
# 创建带选项的卷
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt o=addr=192.168.1.100,rw \
  --opt device=:/path/to/export \
  nfs-volume

# 备份卷
docker run --rm \
  -v my-volume:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/my-volume-backup.tar.gz -C /data .

# 恢复卷
docker run --rm \
  -v my-volume:/data \
  -v $(pwd):/backup \
  alpine \
  tar xzf /backup/my-volume-backup.tar.gz -C /data

系统管理命令 ​

6.1 系统信息 ​

bash
# 显示系统信息
docker info
docker info --format '{{ .ServerVersion }}'
docker info --format '{{ .Driver }}'
docker info --format '{{ .DockerRootDir }}'

# 显示版本
docker version
docker --version

# 检查系统
docker system df              # 磁盘使用情况
docker system df -v           # 详细磁盘使用
docker system events          # 系统事件
docker system info            # 系统信息

# 登录/登出仓库
docker login registry.example.com
docker login -u username -p password registry.example.com
docker logout registry.example.com

6.2 系统维护 ​

bash
# 清理系统
docker system prune            # 删除未使用的数据
docker system prune -a         # 删除所有未使用的数据
docker system prune --volumes  # 包括卷
docker system prune -f         # 强制,不确认

# 清理特定资源
docker container prune         # 容器
docker image prune             # 镜像
docker network prune           # 网络
docker volume prune            # 卷

# 带过滤器的清理
docker system prune --filter "until=24h"
docker system prune --filter "label=app=myapp"

6.3 上下文管理 ​

bash
# 列出上下文
docker context ls

# 创建上下文
docker context create my-context \
  --docker host=tcp://192.168.1.100:2376

docker context create my-context \
  --docker host=ssh://user@192.168.1.100

# 切换上下文
docker context use my-context

# 查看当前上下文
docker context show

# 删除上下文
docker context rm my-context

# 导出/导入上下文
docker context export my-context -o my-context.tar
docker context import my-context my-context.tar

Docker Compose 命令 ​

7.1 Compose 基础命令 ​

bash
# 启动服务
docker-compose up
docker-compose up -d                    # 后台运行
docker-compose up --build               # 重新构建
docker-compose up --force-recreate      # 强制重新创建
docker-compose up --scale web=3         # 扩展服务

# 停止服务
docker-compose stop                     # 停止
docker-compose down                     # 停止并删除
docker-compose down -v                  # 同时删除卷
docker-compose down --rmi all           # 同时删除镜像

# 查看状态
docker-compose ps
docker-compose ps -q                    # 只显示 ID

# 查看日志
docker-compose logs
docker-compose logs -f                  # 实时跟踪
docker-compose logs web                 # 特定服务

# 构建服务
docker-compose build
docker-compose build --no-cache         # 不使用缓存
docker-compose build --parallel         # 并行构建

# 拉取镜像
docker-compose pull
docker-compose pull --ignore-pull-failures

# 推送镜像
docker-compose push

7.2 Compose 服务管理 ​

bash
# 启动/停止特定服务
docker-compose start web
docker-compose stop web
docker-compose restart web

# 扩展服务
docker-compose up -d --scale web=3

# 在容器中执行命令
docker-compose exec web bash
docker-compose exec -T web ps aux

# 运行一次性命令
docker-compose run --rm web python manage.py migrate

# 查看配置
docker-compose config                   # 验证和查看配置
docker-compose config -q                # 只验证,不输出

# 暂停/恢复
docker-compose pause
docker-compose unpause

7.3 Compose 高级命令 ​

bash
# 指定多个 Compose 文件
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

# 指定项目名
docker-compose -p myproject up -d

# 查看事件
docker-compose events
docker-compose events --json

# 查看端口
docker-compose port web 80

# 查看进程
docker-compose top

# 复制文件
docker-compose cp web:/etc/nginx/nginx.conf ./

Swarm 命令 ​

8.1 Swarm 集群管理 ​

bash
# 初始化 Swarm
docker swarm init
docker swarm init --advertise-addr 192.168.1.100
docker swarm init --listen-addr 192.168.1.100:2377

# 加入 Swarm
docker swarm join --token <TOKEN> 192.168.1.100:2377

# 离开 Swarm
docker swarm leave
docker swarm leave --force

# 更新 Swarm
docker swarm update --autolock=true

# 查看 Swarm 信息
docker swarm ca --rotate
docker swarm ca --external-ca

8.2 节点管理 ​

bash
# 列出节点
docker node ls
docker node ls --filter role=manager

# 查看节点详情
docker node inspect <NODE>
docker node inspect --pretty <NODE>

# 更新节点
docker node update --availability drain <NODE>
docker node update --availability active <NODE>
docker node update --label-add zone=public <NODE>

# 提升/降级节点
docker node promote <NODE>
docker node demote <NODE>

# 删除节点
docker node rm <NODE>

# 查看节点任务
docker node ps <NODE>

8.3 服务管理 ​

bash
# 创建服务
docker service create --name web --replicas 3 -p 80:80 nginx:alpine

# 列出服务
docker service ls
docker service ps web

# 查看服务详情
docker service inspect web
docker service inspect --pretty web

# 查看日志
docker service logs web
docker service logs -f web

# 扩展服务
docker service scale web=5

# 更新服务
docker service update --image nginx:1.25 web
docker service update --replicas 5 web
docker service update --publish-add 443:443 web

# 回滚服务
docker service update --rollback web

# 删除服务
docker service rm web

8.4 堆栈管理 ​

bash
# 部署堆栈
docker stack deploy -c docker-compose.yml myapp

# 列出堆栈
docker stack ls

# 查看堆栈服务
docker stack services myapp

# 查看堆栈任务
docker stack ps myapp

# 删除堆栈
docker stack rm myapp

8.5 配置和密钥管理 ​

bash
# 创建配置
docker config create my-config config.txt
echo "content" | docker config create my-config -

# 列出配置
docker config ls
docker config inspect my-config

# 删除配置
docker config rm my-config

# 创建密钥
docker secret create my-secret secret.txt
echo "secret" | docker secret create my-secret -

# 列出密钥
docker secret ls
docker secret inspect my-secret

# 删除密钥
docker secret rm my-secret

下一步 ​

基于 MIT 许可发布