Docker CLI 命令参考
Docker CLI 是与 Docker 引擎交互的主要方式。本文将全面介绍 Docker 命令的分类、用法和最佳实践。
目录
命令概览
1.1 命令结构
bash
# 基本语法
docker [命令] [子命令] [选项] [参数]
# 示例
docker container run -d --name web -p 80:80 nginx:alpine1.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 web3.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:alpine5.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.com6.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.tarDocker 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 push7.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 unpause7.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-ca8.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 web8.4 堆栈管理
bash
# 部署堆栈
docker stack deploy -c docker-compose.yml myapp
# 列出堆栈
docker stack ls
# 查看堆栈服务
docker stack services myapp
# 查看堆栈任务
docker stack ps myapp
# 删除堆栈
docker stack rm myapp8.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