Docker Compose 教程:安装、使用与快速入门
Docker Compose 教程:安装、使用与快速入门
目录
什么是 Docker Compose?
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。通过一个 YAML 文件(docker-compose.yml),您可以配置应用程序的所有服务,然后使用单个命令创建和启动所有服务。
主要功能:
- 使用 YAML 文件管理多容器应用
- 一键启动/停止整个应用栈
- 服务间网络和卷管理
- 环境变量配置
- 服务依赖关系管理
典型应用场景:
- 开发环境搭建
- 自动化测试环境
- 单主机部署
- 微服务应用
安装 Docker Compose
在安装 Docker Compose 前,请确保已安装 Docker Engine
Linux 安装方法
# 下载最新版本的 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加可执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
# 应输出:Docker Compose version v2.23.0
Windows/macOS 安装
Windows 和 macOS 的 Docker Desktop 已包含 Docker Compose,无需单独安装。
Docker Compose 基础
核心概念
- 服务 (Service):一个容器化的应用(如 web 服务器、数据库)
- 项目 (Project):由一组关联服务组成的完整应用
- Compose 文件:定义服务、网络和卷的 YAML 文件
docker-compose.yml 文件结构
version: "3.9" # Compose 文件格式版本
services: # 定义所有服务
web: # 服务名称
image: nginx:alpine # 使用的镜像
ports:
- "80:80" # 端口映射
volumes:
- ./html:/usr/share/nginx/html # 卷挂载
db:
image: postgres:15
environment: # 环境变量
POSTGRES_PASSWORD: example
volumes: # 定义卷
db-data: # 卷名称
YAML 文件关键字段
| 字段 | 说明 | 示例 |
|---|---|---|
version |
Compose 文件版本 | "3.9" |
services |
定义所有服务 | |
image |
使用的 Docker 镜像 | nginx:alpine |
build |
根据 Dockerfile 构建镜像 | context: ./dir |
ports |
端口映射 | - "8080:80" |
volumes |
卷挂载 | - ./data:/app/data |
environment |
设置环境变量 | DEBUG: "true" |
depends_on |
服务依赖关系 | - db |
networks |
加入的网络 | - backend |
快速入门示例
1. 创建简单的 WordPress 站点
# docker-compose.yml
version: "3.9"
services:
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpresspass
wordpress:
image: wordpress:latest
ports:
- "8000:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpresspass
WORDPRESS_DB_NAME: wordpress
depends_on:
- db
volumes:
db_data:
启动应用:
docker-compose up -d
访问 http://localhost:8000 完成 WordPress 安装
2. Python + Redis 计数器应用
项目结构:
counter-app/
├── app.py
├── requirements.txt
└── docker-compose.yml
app.py:
from flask import Flask
from redis import Redis
import os
app = Flask(__name__)
redis = Redis(host=os.environ.get('REDIS_HOST', 'redis'), port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return f'Hello World! 页面访问次数: {count}'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)
requirements.txt:
flask
redis
docker-compose.yml:
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
environment:
REDIS_HOST: redis
depends_on:
- redis
redis:
image: "redis:alpine"
运行应用:
# 构建并启动
docker-compose up --build -d
# 访问应用
curl http://localhost:5000
# 输出:Hello World! 页面访问次数: 1
常用命令
| 命令 | 说明 |
|---|---|
docker-compose up |
创建并启动所有服务 |
docker-compose up -d |
在后台运行服务 |
docker-compose down |
停止并移除所有容器、网络 |
docker-compose ps |
查看运行中的服务 |
docker-compose logs |
查看服务日志 |
docker-compose logs -f web |
实时查看 web 服务日志 |
docker-compose build |
构建或重新构建服务镜像 |
docker-compose start |
启动已存在的服务 |
docker-compose stop |
停止运行中的服务 |
docker-compose restart |
重启服务 |
docker-compose exec web sh |
进入 web 服务的容器 |
docker-compose pull |
拉取服务的最新镜像 |
docker-compose config |
验证 Compose 文件格式 |
最佳实践
-
版本控制:
- 将
docker-compose.yml和Dockerfile纳入版本控制 - 使用明确的镜像标签(避免
latest)
- 将
-
环境分离:
# docker-compose.override.yml (开发环境) version: "3.9" services: web: volumes: - ./src:/app/src ports: - "3000:3000" -
资源限制:
services: db: deploy: resources: limits: cpus: '0.50' memory: 512M -
健康检查:
services: web: healthcheck: test: ["CMD", "curl", "-f", "http://localhost"] interval: 30s timeout: 10s retries: 3 -
网络优化:
networks: app-network: driver: bridge ipam: config: - subnet: 172.20.0.0/24
总结
Docker Compose 是容器化开发不可或缺的工具:
- ✅ 简化多容器管理:通过单一文件定义复杂应用
- ✅ 加速开发流程:一键启动完整开发环境
- ✅ 环境一致性:确保开发、测试、生产环境一致
- ✅ 资源高效利用:优化容器间通信和资源共享
下一步学习:
💡 提示:使用
docker-compose --help随时查看命令帮助,实践是掌握 Docker Compose 的最佳方式!

浙公网安备 33010602011771号