总结的相对全面且详细的 Docker 和 Docker Compose 命令合集。为了方便查阅,我将其分为 基础/镜像管理、容器操作、Docker Compose 编排 以及 常用参数详解 四个部分。
第一部分:Docker 基础与镜像命令 (Images)
镜像(Image)是容器的静态模板(类似于软件安装包)。
| 命令 | 简写/变体 | 作用 | 详解 |
|---|---|---|---|
| docker search <关键词> | - | 搜索镜像 | 在 Docker Hub 上搜索公共镜像。 |
| docker pull <镜像名>:<标签> | - | 拉取镜像 | 下载镜像。如果不写标签,默认下载:latest. |
| docker images | docker image ls | 查看镜像 | 列出本地所有下载的镜像。 |
| docker rmi <镜像ID或名称> | docker image rm | 删除镜像 | 删除本地镜像。如果镜像正在被容器使用,需先删除容器。 |
| docker build -t <名称> . | - | 构建镜像 | 根据当前目录下的Dockerfile构建新镜像。 |
| docker tag <源ID> <新名> | - | 标记镜像 | 给镜像打标签(通常用于上传到私有仓库前)。 |
| docker save -o <包名.tar> <镜像> | - | 导出镜像 | 将镜像保存为 tar 文件(用于离线迁移)。 |
| docker load -i <包名.tar> | - | 导入镜像 | 从 tar 文件加载镜像。 |
| docker container prune | - | 清理容器 | 删除所有已停止的容器。 |
| docker image prune | - | 清理镜像 | 删除所有悬空镜像。 |
| docker image prune -a | - | 清理镜像 | 如果要删除所有未使用的镜像(不管是否悬空)。 |
| docker network prune | - | 清理网络 | 删除所有未使用的网络。 |
| docker volume prune | - | 清理卷 | 删除所有未使用的卷 |
| docker system prune | - | 清理系统 | 慎用。一键清理未使用的镜像、悬空镜像和停止的容器。 |
第二部分:Docker 容器操作命令 (Containers)
容器(Container)是镜像运行时的实体(类似于运行中的软件进程)。
-
生命周期管理
| 命令 | 作用 | 详解 |
|---|---|---|
| docker run [参数] <镜像> | 创建并启动 | 最核心命令(详见下方参数详解)。 |
| docker start <容器ID> | 启动 | 启动一个已经停止的容器。 |
| docker stop <容器ID> | 停止 | 优雅停止容器(发送 SIGTERM 信号)。 |
| docker restart <容器ID> | 重启 | 重启容器。 |
| docker kill <容器ID> | 强制停止 | 强制杀掉容器进程(发送 SIGKILL 信号)。 |
| docker rm <容器ID> | 删除容器 | 删除已停止的容器。加-f可强制删除运行中的容器。 |
-
查看与交互
| 命令 | 作用 | 详解 |
|---|---|---|
| docker ps | 查看运行中容器 | 仅列出正在运行的。 |
| docker ps -a | 查看所有容器 | 列出所有容器(包括已停止的)。 |
| docker logs <容器ID> | 查看日志 | 查看容器的标准输出日志。常用-f实时跟踪。 |
| docker exec -it <容器ID> /bin/bash | 进入容器 | 在运行的容器中开启一个交互终端。(sh或bash) |
| docker inspect <容器ID> | 查看详情 | 查看容器的 IP、挂载、环境变量等详细 JSON 信息。 |
| docker stats | 资源监控 | 实时查看容器的 CPU、内存、网络 IO 使用情况。 |
| docker cp <本地路径> <容器ID>:<路径> | 文件拷贝 | 在宿主机和容器之间复制文件。 |
| docker network ls | 查看网络 | 查看容器网络ID、类型、名称等信息。 |
| docker volume create <卷名称> | 创建卷 | 创建容器卷。 |
| docker run -v <卷名称>:/app/data nginx | 挂载卷 | 将指定卷挂载到容器中。 |
第三部分:Docker Compose 命令
Docker Compose 用于管理多容器应用。 注意:新版 Docker 已集成 Compose,命令由 docker-compose 变为 docker compose (中间是空格),但老写法依然兼容。
| 命令 | 作用 | 详解 |
|---|---|---|
| docker-compose up -d | 启动服务 | 后台启动所有服务。如果镜像不存在会自动构建或拉取。 |
| docker-compose up -d <服务名> | 启动指定服务 | 后台启动指定服务。如果镜像不存在会自动构建或拉取。 |
| docker-compose down | 停止并清理 | 停止容器并删除容器、网络。 |
| docker-compose down -v | 彻底清理 | 在 down 的基础上,同时删除数据卷(Volumes)(慎用)。 |
| docker-compose stop | 停止 | 停止容器但不删除。 |
| docker-compose start/stop | 启停 | 仅启动或停止服务,不删除容器。 |
| docker-compose restart | 重启 | 重启服务。 |
| docker-compose up -d --force-recreate | 重建 | 强制重新创建容器 |
| docker-compose ps | 查看状态 | 查看当前 docker-compose.yml 管理的容器状态。 |
| docker-compose logs -f | 查看日志 | 实时查看所有服务的日志聚合。 |
| docker-compose logs -f <服务名> | 指定日志 | 仅查看某一个服务的日志。推荐使用--tail参数只获取最新日志 |
| docker-compose build | 构建 | 重新构建镜像(不启动)。 |
| docker-compose pull | 拉取 | 拉取 docker-compose.yml 中定义的镜像。 |
| docker-compose pull <服务名> | 拉取 | 拉取 docker-compose.yml 中指定服务名镜像。 |
| docker-compose config | 检查配置 | 验证 docker-compose.yml 文件格式是否正确。 |
第四部分:核心命令参数详解 (重点)
初学者最容易晕的是 docker run 和 docker compose 的各种参数,这里做深度解析。
1. docker run 常用参数
语法: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
-
-d(Detached): 后台运行容器,并返回容器 ID。- 例:
docker run -d nginx
- 例:
-
-p(Port): 端口映射。格式为宿主机端口:容器端口。- 例:
docker run -p 8080:80 nginx(访问宿主机的 8080 即访问容器的 80)。
- 例:
-
-v(Volume): 挂载数据卷。格式为宿主机路径:容器路径。- 例:
docker run -v /data/html:/usr/share/nginx/html nginx
- 例:
-
--name: 给容器起一个好记的名字(否则是随机名)。- 例:
docker run --name my-web nginx
- 例:
-
-e( Environment ): 设置环境变量。- 例:
docker run -e MYSQL_ROOT_PASSWORD=123456 mysql
- 例:
-
--restart: 重启策略。no: 默认,不重启。always: 只要容器退出了就重启(开机自启常用)。on-failure: 只有非正常退出(错误码非0)才重启。
-
--network: 指定网络模式(如host,bridge或自定义网络)。 -
--rm: 容器停止后自动删除容器文件(用于临时测试)。
2. docker logs 常用参数
-
-f(Follow): 实时跟踪日志输出(类似于 Linux 的tail -f)。 -
--tail <行数>: 仅查看最后 N 行。- 例:
docker logs -f --tail 100 my-web
- 例:
3. docker exec 常用参数
-i(Interactive): 保持 STDIN 打开。-t(TTY): 分配一个伪终端。- 组合使用
-it: 几乎是搭配使用的,让我们像通过 SSH 一样进入容器。(部分容器可能没有入口)
第五部分:实战场景举例
场景 1:彻底清理 Docker 空间
当磁盘空间不足时,运行以下命令清理所有不再使用的资源:
# 清理停止的容器、未被使用的网络、悬空的镜像
docker system prune
# 如果要连同未使用的数据卷一起清理(注意数据丢失风险)
docker system prune --volumes
场景 2:更新 Docker Compose 服务
当你修改了 docker-compose.yml 或代码需要重新部署时:
# 1. 拉取最新镜像(如果使用的是远程镜像)
docker compose pull
# 2. 重新构建(如果使用的是本地 Dockerfile)
docker compose build
# 3. 重新启动(Docker 会智能识别变更,仅重启有变化的服务)
docker compose up -d
# 4. 删除旧的无用镜像
docker image prune -f
场景 3:调试容器
容器启动失败,如何排查?
# 1. 查看容器状态,看是否 Exited
docker ps -a
# 2. 查看日志报错
docker logs <容器ID>
# 3. 如果容器还在运行但服务不正常,进入容器内部查看
docker exec -it <容器ID> /bin/sh
# 检查配置文件或网络连接
ping baidu.com
cat /etc/nginx/nginx.conf
总结速查表 (Cheat Sheet)
- 启动:
docker run -d -p 80:80 --name web nginx - 进入:
docker exec -it web bash - 日志:
docker logs -f web - 停止删:
docker stop web && docker rm web - 编排起:
docker compose up -d - 编排停:
docker compose down