Docker Compose简介
1. Docker Compose 是什么
Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。它通过 一个 YAML 文件(通常命名为 docker-compose.yml
)来配置应用的服务、网络和卷,从而简化多容器应用的部署和管理。
2. 为什么使用 Docker Compose
使用 Docker Compose 的主要优点包括:
- 简化多容器管理:通过一个文件定义所有服务,避免手动运行多个
docker run
命令。 - 环境一致性:确保开发、测试和生产环境的一致性。
- 快速启动和停止:通过一条命令启动或停止整个应用。
- 依赖管理:自动处理服务之间的依赖关系(如数据库先于应用启动)。
- 可移植性:YAML 文件可以轻松共享和版本控制。
3. 安装 Docker Compose
Docker Compose 可以通过以下步骤安装:
源码安装
- 下载 Docker Compose 二进制文件:
# 示例为v2.23.0版本,实际安装时请修改版本
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
包管理器安装(简单)
# debian/ubuntu
apt update
apt install docker-compose
macOS 和 Windows
Docker Desktop 默认包含 Docker Compose,无需单独安装。只需确保 Docker Desktop 已安装并运行。
4. 使用 Docker Compose 部署简单服务的示例
以下是一个使用 Docker Compose 部署简单 Web 服务的示例。不用去管 app.py 和 requirements.txt 的含义,现在只需要跟 docker-compose.yml 混个眼熟。
示例:部署一个 Python Flask 应用和 Redis 服务
-
项目结构:
myapp/
├── app.py
├── requirements.txt
├── Dockerfile
└── docker-compose.yml -
app.py
(Flask 应用):from flask import Flask
import redis
app = Flask(__name__)
redis_client = redis.Redis(host='redis', port=6379)
@app.route('/')
def hello():
count = redis_client.incr('hits')
return f'Hello World! This page has been viewed {count} times.'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000) -
requirements.txt
:flask
redis -
docker-compose.yml
:version: '3.8' # Docker Compose 文件版本
services:
# Web 服务
web:
build: . # 使用当前目录下的 Dockerfile 构建镜像
ports:
- "5000:5000" # 将容器端口 5000 映射到主机端口 5000
volumes:
- .:/app # 将当前目录挂载到容器的 /app 目录
environment:
- FLASK_ENV=development # 设置环境变量
depends_on:
- redis # 依赖 redis 服务
# Redis 服务
redis:
image: redis:alpine # 使用官方 Redis 镜像
ports:
- "6379:6379" # 将容器端口 6379 映射到主机端口 6379
volumes:
- redis_data:/data # 使用命名卷持久化 Redis 数据
# 定义数据卷
volumes:
redis_data: -
Dockerfile(在
myapp/
目录下):FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"] -
启动服务: 在
myapp/
目录下运行:docker-compose up
-
访问应用: 打开浏览器,访问
http://localhost:5000
,页面会显示访问次数(由 Redis 计数)。 -
停止服务: 在
myapp/
目录下运行 docker-compose down:ubuntu@www.zxzsk.com:~/docker/example-web$ docker-compose down
WARN[0000] /home/ubuntu/docker/example-web/docker-compose.yml: `version` is obsolete
[+] Running 3/3
✔ Container example-web-web-1 Removed 10.2s
✔ Container example-web-redis-1 Removed 0.2s
✔ Network example-web_default Removed 0.1s
总结
- Docker Compose 是一个强大的工具,用于定义和运行多容器应用。
- 它通过 YAML 文件简化了多容器的管理,确保环境一致性。
- 通过一个简单的 Flask + Redis 示例,展示了如何使用 Docker Compose 部署服务。
使用 Docker Compose 可以显著提高开发和部署效率,特别适合复杂应用的容器化管理!