Docker CLI 命令速查
这篇速查手册收录日常运维中最常用的 Docker CLI 命令,按镜像、容器、数据卷、网络、系统和 Compose 分类整理,方便随用随查。
文中 镜像名、容器名、卷名 等均为占位符,实际使用时替换成自己的名称即可。
镜像命令
| 命令 | 作用 | 示例 |
|---|---|---|
docker pull | 从仓库拉取镜像 | docker pull nginx:1.27 |
docker images | 列出本地镜像 | docker images nginx |
docker build | 根据 Dockerfile 构建镜像 | docker build -t myapp:1.0 . |
docker tag | 给已有镜像打新标签 | docker tag myapp:1.0 user/myapp:1.0 |
docker push | 推送镜像到仓库 | docker push user/myapp:1.0 |
docker rmi | 删除本地镜像 | docker rmi myapp:1.0 |
docker save | 导出镜像为 tar 包 | docker save -o nginx.tar nginx:1.27 |
docker load | 从 tar 包导入镜像 | docker load -i nginx.tar |
docker history | 查看镜像分层历史 | docker history nginx:1.27 |
docker image inspect | 查看镜像详细配置 | docker image inspect nginx:1.27 |
docker image prune | 清理悬空镜像 | docker image prune |
docker search | 在 Docker Hub 搜索镜像 | docker search nginx |
拉取、打标签、推送私有仓库的完整流程:
docker pull nginx:1.27
docker tag nginx:1.27 registry.example.com/web/nginx:1.27
docker push registry.example.com/web/nginx:1.27
重新构建同名镜像后,旧镜像的 tag 被新镜像占用,旧镜像变成无标签的悬空镜像(dangling),列表里显示为 <none>。docker image prune 只清理这类镜像;加 -a 会连未被任何容器使用的镜像一起删除。
需要构建 ARM/AMD 多架构镜像时使用 buildx:docker buildx build --platform linux/amd64,linux/arm64 -t user/myapp:1.0 .
容器命令
| 命令 | 作用 | 示例 |
|---|---|---|
docker run | 创建并启动容器 | docker run -d --name web -p 8080:80 nginx |
docker ps | 列出容器,加 -a 显示已停止的 | docker ps -a |
docker stop | 停止容器,先发 SIGTERM | docker stop web |
docker start | 启动已停止的容器 | docker start web |
docker restart | 重启容器 | docker restart web |
docker kill | 强制停止容器,直接发 SIGKILL | docker kill web |
docker rm | 删除容器,加 -f 强制删除运行中的 | docker rm -f web |
docker exec | 在运行中的容器里执行命令 | docker exec -it web bash |
docker logs | 查看容器日志 | docker logs -f --tail 100 web |
docker inspect | 查看容器详细信息 | docker inspect web |
docker stats | 实时查看容器资源占用 | docker stats |
docker top | 查看容器内进程 | docker top web |
docker cp | 容器与宿主机之间复制文件 | docker cp web:/etc/nginx/nginx.conf . |
docker update | 更新运行中容器的配置 | docker update --restart unless-stopped web |
docker rename | 重命名容器 | docker rename web web-old |
docker pause | 暂停容器进程 | docker pause web |
docker unpause | 恢复被暂停的容器 | docker unpause web |
docker port | 查看容器端口映射 | docker port web |
docker diff | 查看容器相对镜像的文件变更 | docker diff web |
查看日志和进入容器是排查问题的两件套:
# 实时跟踪最近 100 行日志
docker logs -f --tail 100 web
# 进入容器排查(无 bash 的镜像改用 sh)
docker exec -it web bash
docker run 常用参数
| 参数 | 作用 | 示例 |
|---|---|---|
-d | 后台运行(detach) | docker run -d nginx |
-it | 交互模式并分配伪终端,常组合使用 | docker run -it busybox sh |
--name | 指定容器名称 | --name web |
-p | 端口映射,格式为 宿主机端口:容器端口 | -p 8080:80 |
-P | 将镜像声明的端口随机映射到宿主机 | -P |
-v | 挂载数据卷或宿主机目录 | -v web-html:/usr/share/nginx/html |
--mount | 显式声明挂载,比 -v 更可读 | --mount type=bind,src=/data,dst=/data |
-e | 设置环境变量 | -e TZ=Asia/Shanghai |
--env-file | 从文件批量读取环境变量 | --env-file .env |
--restart | 设置重启策略 | --restart unless-stopped |
--network | 指定加入的网络 | --network frontend |
--rm | 容器退出后自动删除,适合一次性任务 | --rm |
--memory | 限制内存 | --memory 512m |
--cpus | 限制 CPU 核数 | --cpus 1.5 |
-u | 以指定用户身份运行 | -u 1000:1000 |
-w | 设置容器内工作目录 | -w /app |
--hostname | 设置容器主机名 | --hostname web01 |
--add-host | 向容器 hosts 文件追加记录 | --add-host db.local:192.168.1.10 |
--read-only | 根文件系统只读 | --read-only |
--entrypoint | 覆盖镜像的入口命令 | --entrypoint sh |
--privileged | 特权模式,授予全部宿主机能力,慎用 | --privileged |
--restart 支持四种策略:
| 策略 | 含义 |
|---|---|
no | 不自动重启(默认) |
on-failure | 仅异常退出时重启,可限制次数,如 on-failure:3 |
always | 无论退出状态都重启,Docker 守护进程启动时也会拉起 |
unless-stopped | 与 always 类似,但手动 stop 过的容器不再随守护进程启动 |
一个带齐常用参数的实际例子:
docker run -d \
--name web \
-p 8080:80 \
-v web-html:/usr/share/nginx/html \
-e TZ=Asia/Shanghai \
--restart unless-stopped \
--network frontend \
nginx:1.27
--rm 表示退出即删除,--restart 表示退出后重启,两者语义冲突,Docker 会直接报错。临时调试用 --rm,长期服务用 --restart。
数据卷命令
| 命令 | 作用 | 示例 |
|---|---|---|
docker volume create | 创建数据卷 | docker volume create db-data |
docker volume ls | 列出数据卷 | docker volume ls |
docker volume inspect | 查看数据卷详情(含宿主机目录) | docker volume inspect db-data |
docker volume rm | 删除数据卷 | docker volume rm db-data |
docker volume prune | 清理未被任何容器使用的数据卷 | docker volume prune |
即使容器被删除,它挂载的命名卷依然保留,数据不会丢。若确实想连同卷一起删除,用 docker rm -v 容器名。docker volume prune 清理前请确认卷里没有还需要的数据。
网络命令
| 命令 | 作用 | 示例 |
|---|---|---|
docker network create | 创建网络 | docker network create frontend |
docker network ls | 列出网络 | docker network ls |
docker network inspect | 查看网络详情(含接入的容器) | docker network inspect frontend |
docker network connect | 把运行中的容器接入网络 | docker network connect frontend web |
docker network disconnect | 把容器从网络中断开 | docker network disconnect frontend web |
docker network rm | 删除网络 | docker network rm frontend |
docker network prune | 清理未被容器使用的网络 | docker network prune |
同一自定义网络内的容器可以直接用容器名互相访问:
docker network create app-net
docker run -d --name db --network app-net -e POSTGRES_PASSWORD=secret postgres:16
docker run -d --name api --network app-net -p 8080:8080 myapp:1.0
# api 容器内可以直接通过主机名 db 访问数据库
系统命令
| 命令 | 作用 | 示例 |
|---|---|---|
docker version | 查看客户端与服务端版本 | docker version |
docker info | 查看引擎信息(存储驱动、资源等) | docker info |
docker system df | 查看各类资源的磁盘占用 | docker system df -v |
docker system prune | 一键清理未使用的资源 | docker system prune |
docker system events | 实时查看 Docker 事件流 | docker system events |
docker system prune 的常用变体:
# 清理停止的容器、未使用的网络、悬空镜像和构建缓存
docker system prune
# 连未被容器使用的镜像也一起清理
docker system prune -a
# 再连未使用的数据卷也一起清理(最激进)
docker system prune -a --volumes
docker system prune -a --volumes 会删除所有未被容器引用的镜像和数据卷,删错不可恢复。生产环境建议先用 docker system df -v 确认占用情况,再按需选择清理范围。
Compose 命令
Docker Compose v2 已作为 Docker 的子命令内置,格式是 docker compose(中间是空格),不是旧版的 docker-compose(连字符)。
| 命令 | 作用 | 示例 |
|---|---|---|
docker compose up | 创建并启动全部服务,加 -d 后台运行 | docker compose up -d |
docker compose down | 停止并删除容器和网络 | docker compose down |
docker compose ps | 查看各服务状态 | docker compose ps |
docker compose logs | 查看服务日志 | docker compose logs -f app |
docker compose start | 启动已停止的服务 | docker compose start |
docker compose stop | 停止服务但不删除 | docker compose stop |
docker compose restart | 重启服务 | docker compose restart app |
docker compose exec | 在服务容器内执行命令 | docker compose exec app bash |
docker compose build | 重新构建服务的镜像 | docker compose build app |
docker compose pull | 拉取服务依赖的镜像 | docker compose pull |
docker compose config | 校验并输出最终生效的配置 | docker compose config |
日常操作流程:
# 启动全部服务(后台)
docker compose up -d
# 跟踪 app 服务的日志
docker compose logs -f app
# 改动代码后重新构建并启动
docker compose up -d --build app
# 停止并清理(加 -v 连数据卷一起删)
docker compose down
多环境部署时可以用 -f 指定 compose 文件、-p 指定项目名:docker compose -f compose.prod.yaml -p myapp up -d。项目名决定了容器、网络等资源名前缀,不同项目名的栈互不影响。