
Docker 容器的生命周期包含多个状态:Created(已创建)、Running(运行中)、Paused(暂停)、Stopped(停止)和 Deleted(删除)。理解这些状态及其转换是有效管理 Docker 容器的基础。
| 命令 | 功能描述 | 实际示例 | 使用频率 | 
| docker run | 创建并启动新容器 | docker run -d --name my-nginx nginx:alpine | ⭐⭐⭐⭐⭐ | 
| docker start | 启动已存在的停止容器 | docker start my-nginx | ⭐⭐⭐⭐⭐ | 
| docker stop | 优雅停止运行中的容器 (发送 SIGTERM) | docker stop my-nginx(等待10秒) | ⭐⭐⭐⭐⭐ | 
| docker restart | 重启容器 | docker restart my-nginx | ⭐⭐⭐⭐ | 
| docker pause/unpause | 暂停/恢复容器 | docker pause my-nginx | ⭐⭐⭐ | 
| docker kill | 强制停止容器 (发送 SIGKILL) | docker kill my-nginx(立即停止) | ⭐⭐ | 
| docker rm | 删除已停止的容器 | docker rm my-nginx | ⭐⭐⭐⭐⭐ | 
| docker create | 创建容器但不立即启动 | docker create --name my-nginx nginx:alpine | ⭐⭐ | 
| 命令 | 功能描述 | 实际示例 | 使用频率 | 
| docker ps | 查看运行中的容器 | docker ps -a(查看所有容器) | ⭐⭐⭐⭐⭐ | 
| docker logs | 查看容器日志输出 | docker logs -f my-nginx(实时跟踪) | ⭐⭐⭐⭐⭐ | 
| docker stats | 实时监控容器资源使用 (CPU/内存/网络) | docker stats my-nginx | ⭐⭐⭐⭐ | 
| docker top | 查看容器内运行的进程 | docker top my-nginx | ⭐⭐⭐ | 
| docker inspect | 查看容器详细信息 (配置/状态/网络) | docker inspect my-nginx | ⭐⭐⭐⭐⭐ | 
| docker events | 查看实时事件流 (创建/启动/停止等) | docker events --filter event=die | ⭐⭐ | 
| docker wait | 等待容器停止并获取退出状态码 | docker wait my-nginx | ⭐ | 
资源限制:使用 -m、--cpus等参数限制容器资源,防止单个容器耗尽主机资源。
docker run -it --memory=512m --cpus=1.5 alpine
自动重启策略:根据容器退出状态配置自动重启。
docker run --restart=always nginx # 总是重启 docker run --restart=on-failure:5 nginx # 失败时最多重启5次
健康检查:在 Dockerfile 中定义健康检查指令,或在运行容器时指定。
# Dockerfile 中定义 HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost/ || exit 1
清理机制:使用 --rm选项运行临时容器,或定期使用 prune命令清理。
docker run --rm -it ubuntu # 退出后自动删除 docker system prune -a # 清理所有停止的容器、未使用的镜像和网络
容器部署涉及运行时的各种配置,包括网络、存储、环境变量等。
docker run命令是启动容器的核心,选项繁多。
| 选项 | 功能描述 | 实际示例 | 使用频率 | 
| -d/--detach | 后台运行容器 | docker run -d nginx | ⭐⭐⭐⭐⭐ | 
| --name | 为容器指定名称 | docker run --name my-web nginx | ⭐⭐⭐⭐⭐ | 
| -p/--publish | 端口映射 (主机端口:容器端口) | docker run -p 8080:80 nginx | ⭐⭐⭐⭐⭐ | 
| -v/--volume | 挂载数据卷或主机目录 | docker run -v /host/path:/container/path nginx | ⭐⭐⭐⭐⭐ | 
| -e/--env | 设置环境变量 | docker run -e MY_VAR=value nginx | ⭐⭐⭐⭐⭐ | 
| --rm | 容器退出后自动删除 | docker run --rm -it ubuntu bash | ⭐⭐⭐⭐ | 
| -it | 交互式运行容器 (组合选项) | docker run -it ubuntu bash | ⭐⭐⭐⭐⭐ | 
| --network | 指定容器网络 | docker run --network=my-bridge nginx | ⭐⭐⭐⭐ | 
| --restart | 设置重启策略 | docker run --restart=on-failure:3 nginx | ⭐⭐⭐ | 
| -u/--user | 指定运行用户 | docker run -u 1000:1000 nginx | ⭐⭐ | 
| --env-file | 从文件读取环境变量 | docker run --env-file .env nginx | ⭐⭐⭐ | 
Docker 提供了多种网络模式来适应不同场景。
| 网络模式 | 描述 | 适用场景 | 使用频率 | 
| bridge | 默认模式。容器通过 Docker 桥接网络与主机和其他容器通信。 | 单主机内容器通信,需要端口映射 | ⭐⭐⭐⭐⭐ | 
| host | 容器直接使用主机网络,无隔离。性能最好,但安全性较低。 | 高性能需求场景,如网络密集型应用 | ⭐⭐⭐ | 
| none | 禁用所有网络。容器完全隔离。 | 安全隔离要求极高的场景 | ⭐ | 
| overlay | 支持多主机容器通信。 | Docker Swarm 或 Kubernetes 集群环境 | ⭐⭐⭐ (集群) | 
| macvlan | 为容器分配 MAC 地址,使其在物理网络上像一台物理设备。 | 需要容器直接暴露在物理网络的场景 | ⭐⭐ | 
常用网络管理命令:
# 查看网络列表docker network ls# 创建自定义桥接网络docker network create --driver bridge --subnet 192.168.1.0/24 my-bridge# 将运行中的容器连接到网络docker network connect my-bridge my-container# 断开容器与网络的连接docker network disconnect my-bridge my-container# 查看网络详细信息docker network inspect my-bridge# 删除网络docker network rm my-bridge
容器本身是临时的,数据持久化需要依赖卷(Volume)或绑定挂载(Bind Mount)。
| 方式 | 描述 | 优点 | 缺点 | 
| Volume | Docker 管理的持久化数据存储,与容器生命周期分离。 | 易于备份、迁移和管理,是 Docker 推荐的方式。 | 位置在 Docker 存储区域,主机上直接访问稍复杂。 | 
| Bind Mount | 将主机上的特定目录或文件直接挂载到容器中。 | 主机和容器之间共享文件方便,如配置文件、源代码。 | 依赖主机目录结构,可移植性较差。 | 
| tmpfs | 将数据存储在内存中,仅适用于 Linux 主机。 | 速度快,但容器停止后数据丢失。 | 非持久化,适用于临时敏感数据。 | 
常用数据卷命令:
# 查看卷列表docker volume ls# 创建命名卷docker volume create my-vol# 查看卷详细信息docker volume inspect my-vol# 使用卷启动容器docker run -d -v my-vol:/app/data nginx# 删除未使用的卷docker volume prune# 绑定挂载主机目录docker run -d -v /host/path:/container/path nginx
镜像是容器的基础,管理镜像是 Docker 使用中的重大环节。
| 命令 | 功能描述 | 实际示例 | 使用频率 | 
| docker pull | 从仓库拉取镜像到本地 | docker pull nginx:latest | ⭐⭐⭐⭐⭐ | 
| docker images | 列出本地镜像 | docker images | ⭐⭐⭐⭐⭐ | 
| docker rmi | 删除本地镜像 | docker rmi nginx:latest | ⭐⭐⭐⭐ | 
| docker build | 根据 Dockerfile 构建镜像 | docker build -t my-app:latest . | ⭐⭐⭐⭐⭐ | 
| docker tag | 给镜像打标签 | docker tag my-app:latest my-registry/my-app:v1.0 | ⭐⭐⭐⭐ | 
| docker push | 将镜像推送到远程仓库 | docker push my-registry/my-app:v1.0 | ⭐⭐⭐⭐ | 
| docker save | 将镜像保存为 tar 文件 | docker save -o my-app.tar my-app:latest | ⭐⭐ | 
| docker load | 从 tar 文件加载镜像 | docker load -i my-app.tar | ⭐⭐ | 
| docker history | 查看镜像构建历史 | docker history my-app:latest | ⭐⭐ | 
| docker search | 在 Docker Hub 中搜索镜像 | docker search nginx | ⭐⭐ | 
Dockerfile 是一个包含构建镜像所需指令的文本文件。
常见 Dockerfile 指令:
# 指定基础镜像FROM alpine:3.7# 更新系统并安装包RUN apk update && apk add curl# 设置工作目录WORKDIR /app# 复制应用程序文件COPY app.sh .# 设置入口点ENTRYPOINT ["./app.sh"]
构建镜像:
docker build -t my-image:latest .
docker build支持一些有用选项:
--no-cache:构建时不使用缓存。
--pull:总是尝试拉取基础镜像的最新版本。
要分享镜像,需要将其推送到镜像仓库(如 Docker Hub、私有仓库)。
登录仓库:
docker login
标记镜像:镜像需要符合仓库的命名规范([registry-url]/[username]/[repository]:[tag])。
docker tag my-image:latest your-username/your-repo:your-tag
推送镜像:
docker push your-username/your-repo:your-tag
拉取镜像(在其他机器上):
docker pull your-username/your-repo:your-tag

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(默认名为 docker-compose.yml)来配置所有服务,然后用一条命令即可启动所有服务。
单文件配置:使用 YAML 文件定义应用的所有服务、网络、卷。
一键操作:一条命令启动、停止、重建所有服务。
环境隔离:Compose 默认会为项目创建独立的网络,避免项目间干扰。
变量与扩展:支持环境变量和扩展字段,便于配置复用。
一个典型的 docker-compose.yml文件包含以下部分:
version: '3' # 指定 Compose 文件格式的版本services: # 定义各个服务(容器) web: # 服务名称 image: nginx:latest # 使用的镜像 ports: - "8080:80" # 端口映射 (主机:容器) volumes: - ./html:/usr/share/nginx/html # 挂载数据卷或目录 networks: - my-network # 连接到的网络 depends_on: - database # 依赖关系,先启动 database database: # 另一个服务 image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example_password volumes: - db_data:/var/lib/mysql # 使用命名卷 networks: - my-networkvolumes: # 定义卷(如果不在上面声明,Compose 会自动创建) db_data:networks: # 定义网络(如果不在上面声明,Compose 会自动创建) my-network:
| 命令 | 功能描述 | 使用频率 | 
| docker-compose up | 创建并启动所有服务。-d在后台运行。 | ⭐⭐⭐⭐⭐ | 
| docker-compose down | 停止并删除所有容器、网络。-v同时删除卷。 | ⭐⭐⭐⭐⭐ | 
| docker-compose ps | 列出本项目中的所有容器。 | ⭐⭐⭐⭐ | 
| docker-compose logs | 查看所有服务的日志。-f实时跟踪。 | ⭐⭐⭐⭐ | 
| docker-compose start | 启动已存在的服务容器。 | ⭐⭐⭐ | 
| docker-compose stop | 停止运行中的服务容器,不删除。 | ⭐⭐⭐ | 
| docker-compose restart | 重启服务容器。 | ⭐⭐⭐ | 
| docker-compose exec | 在运行中的服务容器中执行命令。 | ⭐⭐⭐⭐ | 
| docker-compose build | 构建或重新构建服务的镜像。 | ⭐⭐⭐ | 
| docker-compose pull | 拉取服务所需的镜像。 | ⭐⭐ | 
| docker-compose config | 验证并查看 Compose 文件配置。 | ⭐⭐ | 
这是一个经典的多容器应用示例(WordPress + MySQL):
version: '3'services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: somewordpress MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD: wordpress wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress WORDPRESS_DB_NAME: wordpress volumes: - ./wp-content:/var/www/html/wp-contentvolumes: db_data:
部署步骤:
将上述内容保存为 docker-compose.yml。
在终端中运行 docker-compose up -d。
打开浏览器访问 http://localhost:8000即可看到 WordPress 安装界面。
要停止并清理,运行 docker-compose down -v。
先掌握基础:熟练使用 docker run, docker ps, docker logs, docker stop, docker rm, docker images, docker build等核心命令。
理解生命周期:清楚容器的创建、运行、暂停、停止和删除状态及其转换。
重点关注数据持久化:弄清 Volume 和 Bind Mount 的区别与适用场景。
活用 Docker Compose:对于多容器应用,Compose 能极大提升效率。
多实践:在本地尝试运行不同的容器(Nginx, MySQL, Redis等),修改配置,体验整个流程。
| 类别 | 超高频命令 (每天用) | 次高频命令 (常常用) | 
| 容器生命周期 | docker run, docker ps, docker stop, docker rm, docker logs | docker start, docker restart, docker exec | 
| 镜像管理 | docker build, docker images, docker pull | docker tag, docker push, docker rmi | 
| 网络与存储 | docker network ls, docker volume ls | docker network create, docker volume create | 
| Compose | docker-compose up, docker-compose down, docker-compose logs | docker-compose ps, docker-compose exec |