🐳 Docker 命令行与 Docker Compose 全面指南
1 Docker 容器状态管理与优化
Docker 容器的生命周期包含多个状态:Created(已创建)、Running(运行中)、Paused(暂停)、Stopped(停止)和 Deleted(删除)。理解这些状态及其转换是有效管理 Docker 容器的基础。
1.1 容器生命周期管理 (高频常用)
| 命令 | 功能描述 | 实际示例 | 使用频率 |
|---|---|---|---|
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 | ⭐⭐ |
1.2 容器状态查看与监控 (高频常用)
| 命令 | 功能描述 | 实际示例 | 使用频率 |
|---|---|---|---|
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 | ⭐ |
1.3 容器优化策略
-
资源限制:使用
-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 # 清理所有停止的容器、未使用的镜像和网络
2 Docker 容器部署及配置设置
容器部署涉及运行时的各种配置,包括网络、存储、环境变量等。
2.1 容器运行与配置 (高频常用)
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 | ⭐⭐⭐ |
2.2 网络配置管理
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
2.3 数据持久化与卷管理
容器本身是临时的,数据持久化需要依赖卷(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
3 Docker 镜像管理:打包、发布、推送和拉取
镜像是容器的基础,管理镜像是 Docker 使用中的重要环节。
3.1 基础镜像操作 (高频常用)
| 命令 | 功能描述 | 实际示例 | 使用频率 |
|---|---|---|---|
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 | ⭐⭐ |
3.2 镜像构建 (Dockerfile)
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:总是尝试拉取基础镜像的最新版本。
3.3 镜像推送与拉取
要分享镜像,需要将其推送到镜像仓库(如 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
4 Docker Compose 详细讲解
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(默认名为 docker-compose.yml)来配置所有服务,然后用一条命令即可启动所有服务。
4.1 核心概念与优势
- 单文件配置:使用 YAML 文件定义应用的所有服务、网络、卷。
- 一键操作:一条命令启动、停止、重建所有服务。
- 环境隔离:Compose 默认会为项目创建独立的网络,避免项目间干扰。
- 变量与扩展:支持环境变量和扩展字段,便于配置复用。
4.2 docker-compose.yml 文件结构解析
一个典型的 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-network
volumes: # 定义卷(如果不在上面声明,Compose 会自动创建)
db_data:
networks: # 定义网络(如果不在上面声明,Compose 会自动创建)
my-network:
4.3 常用 Docker Compose 命令 (高频常用)
| 命令 | 功能描述 | 使用频率 |
|---|---|---|
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 文件配置。 | ⭐⭐ |
4.4 Docker Compose 实战示例:部署 WordPress
这是一个经典的多容器应用示例(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-content
volumes:
db_data:
部署步骤:
- 将上述内容保存为
docker-compose.yml。 - 在终端中运行
docker-compose up -d。 - 打开浏览器访问
http://localhost:8000即可看到 WordPress 安装界面。 - 要停止并清理,运行
docker-compose down -v。
5 总结与高频命令速查表
5.1 学习建议
- 先掌握基础:熟练使用
docker run,docker ps,docker logs,docker stop,docker rm,docker images,docker build等核心命令。 - 理解生命周期:明白容器的创建、运行、暂停、停止和删除状态及其转换。
- 重视数据持久化:弄清 Volume 和 Bind Mount 的区别与适用场景。
- 活用 Docker Compose:对于多容器应用,Compose 能极大提升效率。
- 多实践:在本地尝试运行不同的容器(Nginx, MySQL, Redis等),修改配置,体验整个流程。
5.2 终极高频命令速查表
| 类别 | 超高频命令 (每天用) | 次高频命令 (经常用) |
|---|---|---|
| 容器生命周期 | 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 |
微信
支付宝