一、Compose 简介
定义:
Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具,通过 YAML 文件 配置服务依赖、资源映射等,实现一键启动复杂应用。
核心优势:
- 用 单文件(docker-compose.yml) 管理多容器配置
- 支持定义服务间依赖关系、网络和数据卷
- 一条命令完成构建、启动、停止全流程
二、使用 Compose 的三个核心步骤
1.用 Dockerfile 定义应用环境
编写 Dockerfile 描述应用镜像的构建规则(如基础镜像、依赖安装、启动命令)。
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
2.用 docker-compose.yml 定义服务
在 YAML 文件中声明应用的所有服务、网络、数据卷等。
version: '3.9'
services:
web:
build: . # 基于当前目录的 Dockerfile 构建
ports:
- "5000:5000" # 端口映射(主机:容器)
volumes:
- .:/app # 挂载主机当前目录到容器 /app
depends_on:
- db # 依赖 db 服务先启动
db:
image: postgres:13 # 使用 PostgreSQL 镜像
environment:
POSTGRES_PASSWORD: secret
3.用命令启动应用
docker-compose up # 前台启动所有服务
docker-compose up -d # 后台启动(守护模式)
docker-compose down # 停止并删除容器
三、Compose 安装指南
1. Linux 安装
官方安装(推荐):
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
国内镜像加速(如 DaoCloud):
curl -L https://get.daocloud.io/docker/compose/releases/latest/download/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
验证安装:
docker-compose --version
2. Alpine Linux 注意事项
需提前安装依赖:
apk add --no-cache py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
3. macOS/Windows 安装
直接安装 Docker Desktop(已内置 Compose),无需额外操作。
四、实战教程:构建 Flask + Redis 应用
1. 准备项目文件
mkdir flask-redis-app && cd $_
touch app.py requirements.txt
app.py(Flask 计数器):
from flask import Flask
import redis
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = cache.incr('hits')
return f'Hello! You are visitor {count}.'
requirements.txt:
flask
redis
2. 编写 Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["flask", "run", "--host=0.0.0.0"]
3. 配置 docker-compose.yml
version: '3.9'
services:
web:
build: . # 构建当前目录的镜像
ports:
- "5000:5000" # 暴露端口
depends_on:
- redis # 依赖 redis 服务
redis:
image: redis:alpine # 使用轻量级 Redis 镜像
volumes:
- redis-data:/data # 持久化数据卷
volumes:
redis-data: {} # 定义数据卷
4. 启动与测试
docker-compose up -d # 后台启动
curl http://localhost:5000 # 访问应用,刷新查看计数器变化
五、关键配置指令详解
指令 | 作用描述 | 示例 |
version | 指定 Compose 文件版本(推荐 3.9) | version: '3.9' |
build | 定义镜像构建规则(上下文、Dockerfile、参数等) | build: ./app 或指定详细参数 |
image | 指定使用已有的镜像(从 Docker Hub 或私有仓库拉取) | image: nginx:alpine |
ports | 映射容器端口到主机 | - "80:80", - "127.0.0.1:8000:80" |
volumes | 挂载数据卷或主机目录(持久化数据、代码热更新) | - ./src:/app/src, - data-volume:/var/lib/data |
depends_on | 定义服务启动顺序(确保依赖服务先启动,但不验证服务是否完全就绪) | depends_on: [db, redis] |
environment | 设置容器环境变量(支持变量注入或直接赋值) | environment: {APP_ENV: dev} 或 environment: [USER=admin] |
networks | 定义自定义网络(实现服务间通信隔离) | networks: [webnet, dbnet] |
六、常用命令速查表
命令 | 说明 |
docker-compose up | 启动所有服务(默认前台运行) |
docker-compose up -d | 后台运行服务 |
docker-compose down | 停止并删除容器、网络(保留数据卷) |
docker-compose down -v | 同时删除数据卷 |
docker-compose logs [服务名] | 查看服务日志 |
docker-compose exec [服务名] | 进入正在运行的容器(如 docker-compose exec web bash) |
docker-compose ps | 查看当前运行的服务容器 |
docker-compose build | 重新构建服务镜像 |