Docker 命令速查
本篇用于学完前九章后的日常查阅,不替代概念和实战教程。尖括号表示必须替换的占位符,例如 <container> 应替换为真实容器名;输入命令时不要保留尖括号。
1. 如何获取帮助
# 查看 Docker 顶层命令和管理对象
docker --help
# 查看 run 的全部参数和示例说明
docker run --help
# 查看镜像子命令
docker image --help
# 查看 Compose 可用命令
docker compose --help
# 显示客户端和服务端版本
docker version
命令结构通常是 docker 对象 动作,例如 docker container ls、docker image rm。docker ps、docker pull 等是常用短写。
2. 容器创建与运行
# 后台启动 Web 服务,并映射宿主机 8080 到容器 80
docker run --detach \
--name web \
--publish 127.0.0.1:8080:80 \
nginx:1.27-alpine
# 启动交互式临时 shell,退出后自动删除容器
docker run --rm --interactive --tty \
alpine:3.20 sh
# 从文件注入环境变量;敏感文件不要提交 Git
docker run --rm \
--env-file ./.env \
<image>:<tag>
# 设置 CPU、内存和进程数量限制
docker run --detach \
--cpus 1.0 \
--memory 512m \
--pids-limit 200 \
<image>:<tag>
# 只创建容器但不启动
docker create --name <container> <image>:<tag>
3. 容器生命周期
# 列出运行中的容器
docker ps
# 列出所有容器,包括已退出的容器
docker ps --all
# 启动已存在的停止容器,不创建新容器
docker start <container>
# 优雅停止,30 秒后仍未退出才强制终止
docker stop --time 30 <container>
# 停止后重新启动容器
docker restart --time 30 <container>
# 删除已停止的容器
docker rm <container>
# 强制停止并删除明确指定的容器
docker rm --force <container>
4. 日志、状态与调试
# 查看最近 100 行日志并持续跟踪;Ctrl+C 不会停止容器
docker logs --follow --tail 100 <container>
# 查看容器完整配置和运行状态
docker inspect <container>
# 提取状态、退出码和 OOM 标记
docker inspect <container> \
--format 'status={{.State.Status}} exit={{.State.ExitCode}} oom={{.State.OOMKilled}}'
# 在运行中的容器里启动一个额外 shell
docker exec --interactive --tty <container> sh
# 在容器中执行单条命令
docker exec <container> <command>
# 查看容器主进程和子进程
docker top <container>
# 查看一次 CPU、内存、网络和磁盘 I/O
docker stats --no-stream <container>
# 查看容器可写层相对镜像的变化
docker diff <container>
# 从容器复制文件到当前宿主机目录
docker cp <container>:/path/to/file ./
5. 镜像与构建
# 拉取明确版本的镜像
docker pull <image>:<tag>
# 列出本地镜像
docker image ls
# 查看镜像配置、架构、层和摘要
docker image inspect <image>:<tag>
# 根据当前目录 Dockerfile 构建并打标签
docker build --tag <image>:<tag> .
# 重新拉取基础镜像后构建
docker build --pull --tag <image>:<tag> .
# 查看构建历史和各层大小
docker history <image>:<tag>
# 为同一镜像增加远程仓库标签
docker tag <image>:<tag> \
<registry>/<namespace>/<image>:<tag>
# 推送已正确命名并完成登录的镜像
docker push <registry>/<namespace>/<image>:<tag>
# 删除明确指定且未被容器引用的镜像
docker image rm <image>:<tag>
6. 网络
# 列出 Docker 网络
docker network ls
# 创建带名称解析的自定义 bridge 网络
docker network create <network>
# 查看子网、网关和已连接容器
docker network inspect <network>
# 把运行中的容器接入另一个网络
docker network connect <network> <container>
# 从网络断开容器
docker network disconnect <network> <container>
# 查看容器发布到宿主机的端口
docker port <container>
# 删除没有容器连接的网络
docker network rm <network>
端口映射格式是 [宿主IP:]宿主端口:容器端口[/协议]:
# 仅本机访问的 TCP 端口映射
docker run --publish 127.0.0.1:8080:80 <image>:<tag>
# 对宿主机接口发布 UDP 端口
docker run --publish 5353:5353/udp <image>:<tag>
7. 卷与挂载
# 创建和列出命名卷
docker volume create <volume>
docker volume ls
# 查看卷驱动、标签和挂载点
docker volume inspect <volume>
# 把命名卷挂载到容器数据目录
docker run --rm \
--mount type=volume,src=<volume>,dst=/data \
<image>:<tag>
# 把当前宿主机目录只读挂载到容器
docker run --rm \
--mount type=bind,src="$PWD",dst=/app,readonly \
<image>:<tag>
# 删除明确指定且未被容器引用的卷;数据永久删除
docker volume rm <volume>
8. Docker Compose
以下命令在 compose.yaml 所在目录执行:
# 解析并输出最终配置,用于检查 YAML 和变量替换
docker compose config
# 仅校验配置,成功时不输出内容
docker compose config --quiet
# 后台创建和启动服务,并等待运行或健康
docker compose up --detach --wait
# 构建本地镜像后启动服务
docker compose up --detach --build
# 查看项目全部服务状态
docker compose ps --all
# 跟踪指定服务最近 100 行日志
docker compose logs --follow --tail 100 <service>
# 在正在运行的服务容器中执行 shell
docker compose exec <service> sh
# 创建一次性服务容器执行命令,结束后自动删除
docker compose run --rm <service> <command>
# 停止服务但保留容器、网络和卷
docker compose stop
# 启动之前停止的服务容器
docker compose start
# 删除服务容器和默认网络,保留命名卷
docker compose down
# 删除容器、网络和命名卷;数据永久删除
docker compose down --volumes
9. 系统与磁盘
# 查看 Engine、存储驱动、插件、CPU、内存和安全选项
docker info
# 查看镜像、容器、卷和构建缓存空间占用
docker system df
# 显示详细对象和可回收空间
docker system df --verbose
# 查看最近 30 分钟创建、启动、停止、OOM 等事件
docker events --since 30m
# 查看和切换 Docker 上下文,例如本机或远程 Engine
docker context ls
docker context use <context>
10. 清理命令
先用列表、inspect 和 system df 确认归属,再执行清理。默认不要附加 --force,让 Docker 显示确认提示。
# 删除所有停止容器;可能丢失日志和可写层现场
docker container prune
# 删除 dangling 镜像,不包括所有未使用标签镜像
docker image prune
# 删除所有未被任何容器引用的镜像
docker image prune --all
# 删除未使用的构建缓存
docker builder prune
# 删除没有容器连接的网络
docker network prune
# 删除未被容器引用的卷;卷内数据永久删除
docker volume prune
# 查看综合清理帮助,不要盲目执行示例
docker system prune --help
最高风险命令
docker system prune -a --volumes 会综合删除停止容器、未使用网络、未被容器引用的镜像、构建缓存和卷。未被引用的卷仍可能保存已下线业务的重要数据。没有逐项确认和可恢复备份时,不要执行。
11. 常用过滤和格式化
# 只查看名称包含 web 的容器
docker ps --all --filter name=web
# 只查看基于指定镜像创建的容器
docker ps --all --filter ancestor=nginx:1.27-alpine
# 自定义表格列,便于快速对比名称、状态和端口
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
# 只输出容器 ID,适合受控脚本进一步处理
docker ps --quiet
# 查看带指定标签的镜像
docker image ls --filter label=org.opencontainers.image.source
把命令用于脚本前,应同时处理空结果、非零退出码、并发变化和不同 Docker 版本,不要直接把 docker ps -q 结果交给危险的批量删除命令。
12. 对象关系速记
| 想做的事 | 推荐命令 | 是否创建新对象 |
|---|---|---|
| 从仓库下载镜像 | docker pull | 新镜像或新内容 |
| 从 Dockerfile 构建镜像 | docker build | 新镜像 |
| 根据镜像运行应用 | docker run | 新容器 |
| 重新启动停止容器 | docker start | 否 |
| 在运行容器中执行命令 | docker exec | 新进程,不是新容器 |
| 停止容器 | docker stop | 否 |
| 删除容器 | docker rm | 删除容器,可写层消失 |
| 删除镜像 | docker image rm | 删除标签或镜像 |
| 停止 Compose 项目 | docker compose stop | 保留全部项目对象 |
| 删除 Compose 运行对象 | docker compose down | 删除容器和默认网络,保留卷 |
如果某条命令的影响范围不明确,先执行对应的 --help,再用 ls、ps、inspect 或 config 确认目标。