Docker 的命令非常丰富,这里按照日常开发和运维中最常用的场景,将核心命令分为五大类进行举例说明: ### 🐳 一、系统信息与帮助 在日常使用前,通常需要确认 Docker 的运行状态和版本。 * `docker version`:查看 Docker 客户端和服务端的版本信息。 * `docker info`:显示 Docker 系统的详细信息(如容器和镜像的数量、存储驱动等)。 * `docker --help`:查看 Docker 的总体帮助信息;或者使用 `docker --help` 查看具体子命令的用法(例如 `docker run --help`)。 ### 📦 二、镜像管理 (Images) 镜像是创建容器的静态模板,类似于软件的“安装包”。 * **拉取镜像**:从 Docker Hub 下载镜像到本地。 * `docker pull nginx`(默认拉取最新的 latest 版本) * `docker pull nginx:1.20.1`(拉取指定版本的镜像) * **查看镜像**:列出本地已经下载的所有镜像。 * `docker images` * **删除镜像**:删除本地的指定镜像。 * `docker rmi nginx:latest` * **构建镜像**:根据当前目录下的 Dockerfile 文件打包一个新的镜像。 * `docker build -t myapp:v1 .`(`-t` 指定镜像名和标签,`.` 代表当前目录) * **保存与加载**:用于镜像的离线迁移。 * `docker save -o nginx.tar nginx:latest`(将镜像导出为 tar 包) * `docker load -i nginx.tar`(从 tar 包导入镜像) ### ⚙️ 三、容器生命周期管理 (Containers) 容器是镜像运行起来的动态实例,这是 Docker 最核心的操作部分。 * **创建并启动容器**(最常用的核心命令): * `docker run -d -p 8080:80 --name my-web --restart=always nginx` * `-d`:后台运行容器(守护式)。 * `-p 8080:80`:端口映射,将宿主机的 8080 端口映射到容器的 80 端口。 * `--name`:给容器起一个易记的名字。 * `--restart=always`:设置容器开机自启或挂掉后自动重启。 * **查看容器**: * `docker ps`(仅查看正在运行的容器) * `docker ps -a`(查看所有容器,包括已经停止的) * **停止/启动/重启容器**: * `docker stop my-web`(优雅地停止容器) * `docker start my-web`(启动已停止的容器) * `docker restart my-web`(重启容器) * **删除容器**: * `docker rm my-web`(删除已停止的容器) * `docker rm -f my-web`(强制删除正在运行的容器) ### 🔧 四、排查与调试 (Debug) 当容器内的服务出现问题时,这些命令能帮你快速定位。 * **查看日志**:排查问题的首选命令。 * `docker logs -f --tail 200 my-web`(实时跟踪查看容器的最后 200 行日志,`-f` 表示持续输出)。 * **进入容器内部**:相当于 SSH 登录到容器里进行操作。 * `docker exec -it my-web /bin/bash`(如果容器内没有 bash,可以尝试换成 `/bin/sh`)。 * **查看容器详情**:获取容器的 IP 地址、挂载路径、环境变量等底层信息。 * `docker inspect my-web`。 * **查看资源占用**:实时监控容器的 CPU、内存等资源使用情况。 * `docker stats`。 ### 🧹 五、网络、存储与系统清理 * **数据卷管理**(用于持久化保存容器内的数据): * `docker volume ls`(列出所有数据卷) * `docker volume create my-data`(创建一个名为 my-data 的数据卷)。 * **网络管理**: * `docker network ls`(列出 Docker 中的所有网络) * `docker network create my-net`(创建自定义网络,方便容器间通过名称通信)。 * **系统清理**(释放磁盘空间的利器): * `docker system prune`(一键清理所有已停止的容器、未被使用的网络和悬空的镜像)。 * `docker system df`(查看 Docker 镜像、容器和数据卷占用的磁盘空间)。 掌握以上这几类命令,基本就能覆盖绝大多数的 Docker 开发、测试和日常运维工作了。你可以先尝试用 `docker run` 跑一个简单的 Nginx 容器练练手! ### 补充 Docker Compose 是多容器编排的神器。在介绍具体命令前,需要先说明一个重要的版本变化: 目前主流的 Docker Compose V2 已经完全集成到了 Docker CLI 中,因此官方推荐使用 **`docker compose`**(中间有空格)来替代旧版独立的 **`docker-compose`**(中间有连字符)。以下将基于最新的 V2 语法为你分类介绍常用命令。 ### 🚀 核心生命周期管理 Compose 的核心是通过 `compose.yaml`(或 `docker-compose.yaml`)文件一键拉起或销毁整套服务。 * **启动服务**(最常用): * `docker compose up -d`:后台启动并运行所有定义的服务。 * `docker compose up -d --build`:在启动前强制重新构建镜像,常用于代码更新后。 * `docker compose up -d web db`:只启动指定的某几个服务。 * **停止与销毁**: * `docker compose down`:停止并删除由 `up` 创建的容器、网络。 * `docker compose down -v`:**慎用!** 停止并删除容器、网络以及定义的数据卷(会丢失持久化数据)。 * `docker compose down --rmi all`:停止并删除相关的所有镜像。 * **暂停/恢复服务**: * `docker compose stop`:停止正在运行的容器,但不删除它们。 * `docker compose start`:重新启动已经存在的、处于停止状态的容器。 * `docker compose restart`:重启项目中的服务。 ### 🔍 查看状态与日志排查 当多容器应用出现问题时,这些命令能帮你快速定位。 * **查看运行状态**: * `docker compose ps`:列出当前项目中正在运行的容器。 * `docker compose ps -a`:列出所有容器,包括已经停止的。 * **查看日志**: * `docker compose logs -f`:实时跟踪查看所有服务的日志输出。 * `docker compose logs -f web`:只看指定服务(如 `web`)的实时日志。 * `docker compose logs --tail 100`:显示各服务最后的 100 行日志。 ### ⚙️ 进阶调试与交互 * **进入容器内部**: * `docker compose exec web /bin/bash`:直接进入名为 `web` 的正在运行的容器中执行命令(相当于 SSH 登录)。 * **执行一次性任务**: * `docker compose run --rm app npm test`:启动一个临时的 `app` 容器执行测试命令,执行完毕后自动删除该容器。 * **配置校验**: * `docker compose config`:校验 `compose.yaml` 文件的语法是否正确,并格式化输出完整的最终配置,是启动前的必备检查步骤。 * **镜像构建**: * `docker compose build`:根据配置文件单独构建所有需要构建的镜像。 掌握这些 Docker Compose 命令,你就可以轻松应对本地开发环境搭建、微服务测试以及小型生产环境的部署工作了。