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 许可发布