1️⃣ 简介 💡
Docker Compose 是 Docker 官方推出的编排(Orchestration)工具,可以让你 📦 用一个命令启动一整套多容器应用。
🔹 定位:「定义并运行多个 Docker 容器的应用」 🔹 背景:
单个容器可以用
Dockerfile定义并运行 ✅但很多系统需要多个容器协作(🌐 Web + 🗄 数据库 + ⚡ 缓存 + 📊 负载均衡)
Compose 用一个 YAML 文件 定义并管理这些关系
2️⃣ 核心概念 🧩
服务 (Service) 🛠️:项目的某一个功能模块容器,可以是多个实例,例如
web、db。项目 (Project) 📦:一组关联服务构成的完整业务应用。
关系结构:
项目 (Project)
├─ web (Service) 💻
├─ db (Service) 🗄
└─ redis (Service) ⚡3️⃣ Compose V2 🔄
🐹 最新版本 Compose V2 用 Go 语言重写,并直接作为 Docker CLI 子命令:
docker compose up📌 区别:
🚀 更快、更稳定
🖥️ Docker Desktop(Mac/Windows)内置
🐧 Linux 用户需手动安装
4️⃣ 安装方法 ⚙️
支持平台:
🐧 Linux
🍎 macOS
💻 Windows 10
📦 Pip 安装(ARM 架构,例如树莓派)
sudo pip install -U docker-compose💽 二进制包安装(Linux x86_64 推荐)
sudo curl -L \
https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) \
> /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose🇨🇳 国内加速:
sudo curl -L \
https://download.fastgit.org/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m) \
> /usr/local/bin/docker-compose🐚 Bash 自动补全
curl -L https://raw.githubusercontent.com/docker/compose/1.27.4/contrib/completion/bash/docker-compose \
> /etc/bash_completion.d/docker-compose5️⃣ 卸载 🗑
二进制安装删除:
sudo rm /usr/local/bin/docker-composePip 安装删除:
sudo pip uninstall docker-compose6️⃣ 快速示例 🚀
我们用 Flask + Redis 创建一个简单的 🌐 记录页面访问次数的 Web 应用。
📂 项目结构
myapp/
├── app.py 🐍
├── Dockerfile 🐳
└── docker-compose.yml 📜📝 app.py
from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis.incr('hits')
return f'Hello World! 页面已访问 {count} 次。\n'
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)🐳 Dockerfile
FROM python:3.6-alpine
ADD . /code
WORKDIR /code
RUN pip install redis flask
CMD ["python", "app.py"]📜 docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"▶️ 启动
docker-compose up访问 http://localhost:5000 ➡ 每刷新一次,📈 计数加 1。
7️⃣ docker-compose.yml 结构 🧾
version: '3'
services:
service_name:
build: .
image: redis:alpine
environment:
- VAR=value
ports:
- "5000:5000"
volumes:
- ./data:/var/lib/mysql
networks:
- backend
networks:
backend:📌 关键字段:
services 🛠️:定义服务及容器属性
volumes 💾:数据持久化
ports 🔌:端口映射
environment 🌿:环境变量
networks 🌐:内部网络
8️⃣ 常用命令速查 🛠
9️⃣ 高级选项 🔧
-d👉 后台运行 🖥️--no-deps👉 不启动依赖容器 ⛔--build👉 重新构建镜像 🔄--force-recreate👉 强制重建 🆕--no-recreate👉 跳过已存在容器 🚫
🔟 常见场景 🎯
🖥️ Web 开发
🗄 临时数据库环境
🌐 微服务调试
1️⃣1️⃣ 扩容与多环境 📦
扩容:
docker-compose scale web=3 db=2多环境:
docker-compose -f docker-compose.yml -f prod.yml up -d1️⃣2️⃣ 调试技巧 🧪
前台运行:
docker-compose up单服务调试:
docker-compose up --no-deps -d web查看进程:
docker-compose top1️⃣3️⃣ 总结 📌
Docker Compose 是 多容器管理的神器 💎:
一个文件 📜 定义完整应用结构
一条命令 🚀 启动全部服务
支持扩容、调试、跨平台 🌐
评论区