Docker Compose 入门教程
一、Docker Compose 简介
Docker Compose 是 Docker 官方提供的多容器编排工具,通过 YAML 文件(docker-compose.yml
)定义应用程序的服务、网络和卷,实现一键式容器管理。其核心优势包括:
- 简化多容器管理:通过单一文件管理多个关联容器。
- 开发环境标准化:团队共享相同的环境配置。
- 快速环境搭建:一条命令启动复杂应用栈。
- 服务依赖管理:自动处理服务间的依赖关系。
- 配置即代码:版本控制环境配置。
二、安装 Docker Compose
-
前置条件:
- 已安装 Docker Engine(版本需与 Compose 兼容)。
- Linux 系统建议配置镜像加速器(如阿里云、清华源)。
-
安装步骤:
- Linux/macOS:
# 下载最新版二进制文件(替换版本号) sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 添加执行权限 sudo chmod +x /usr/local/bin/docker-compose # 验证安装 docker-compose --version
- Windows:通过 Docker Desktop 内置安装(需启用 WSL2 或 Hyper-V)。
- Linux/macOS:
三、核心概念与文件结构
-
docker-compose.yml
文件结构:version: '3.8' # 指定 Compose 版本 services: # 容器服务定义web: # 服务名称image: nginx:latest # 使用官方镜像ports:- "80:80" # 端口映射(宿主机:容器)volumes:- ./html:/usr/share/nginx/html # 挂载数据卷depends_on:- db # 依赖其他服务networks:- custom_network # 使用自定义网络db:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: 123456 # 环境变量networks:- custom_network networks:custom_network:driver: bridge # 使用 bridge 网络驱动ipam:config:- subnet: 172.16.238.0/24 # 指定子网范围
-
核心配置字段:
- 服务字段(services):定义容器配置,如镜像、端口、卷等。
- 网络与存储配置(networks/volumes):管理容器间的网络和数据持久化。
四、环境变量管理
-
.env
文件:- 集中管理环境变量,使配置与代码分离。
- 文件格式为键值对(每行一个变量,不支持多行值):
# .env 文件示例 DB_PASSWORD=mysecret WEB_PORT=8080 ENVIRONMENT=dev
-
在
docker-compose.yml
中引用变量:- 使用
${变量名}
或${变量名:-默认值}
(若变量未定义,使用默认值)。 - 示例:
version: "3.8" services:db:image: mysql:${MYSQL_VERSION:-5.7}environment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}web:image: nginxports:- "${WEB_PORT}:80"
- 使用
-
多环境配置切换:
- 开发环境(
.env.dev
):ENVIRONMENT=dev WEB_PORT=8080
- 生产环境(
.env.prod
):ENVIRONMENT=prod WEB_PORT=80
- 启动时指定环境文件:
docker-compose --env-file .env.prod up
- 开发环境(
五、常用命令实战
-
基础命令:
- 启动所有服务(后台模式):
docker-compose up -d
- 查看运行状态:
docker-compose ps
- 停止服务:
docker-compose stop
- 停止并删除容器:
docker-compose down
- 重建服务:
docker-compose up -d --build
- 启动所有服务(后台模式):
-
调试命令:
- 查看服务日志:
docker-compose logs -f web
- 执行一次性命令:
docker-compose run --rm web python manage.py migrate
- 进入运行中容器:
docker-compose exec db psql -U postgres
- 查看服务日志:
-
扩展操作:
- 水平扩展服务实例:
docker-compose up -d --scale web=3
- 查看服务资源使用:
docker-compose top
- 验证配置文件:
docker-compose config
- 水平扩展服务实例:
六、进阶技巧与最佳实践
-
YAML 语法规范:
- 使用空格缩进(禁止 Tab),键值对冒号后加空格。
- 数字/特殊字符环境变量需用引号包裹(如
"8080:80"
)。
-
性能优化:
- 使用
restart: unless-stopped
实现容器自动重启。 - 通过
deploy/resource/limits
限制 CPU/内存。
- 使用
-
多环境配置:
- 使用
.env
文件管理环境变量。 - 分环境编写多个 Compose 文件(如
docker-compose.prod.yml
)。
- 使用
-
多机管理部署:
- Docker Swarm:使用
docker swarm
进行多机部署。 - Kubernetes:结合
Kompose
工具将 Compose 文件转换为 Kubernetes 配置。
- Docker Swarm:使用