Docker Compose 的详细讲解与实际应用
-
什么是 Docker Compose?
Docker Compose 是一个工具,用于定义和运行多容器 Docker 应用。
通过一个docker-compose.yml
文件,可以同时启动多个服务,简化多容器管理。 -
Docker Compose 的核心功能
- 服务定义:通过 YAML 文件描述服务的构建和运行方式。
- 网络通信:服务间自动创建网络通信,无需额外配置。
- 依赖管理:可以定义服务间的启动顺序。
- 多环境支持:通过
.env
文件实现环境变量管理。
实际应用场景:部署微服务应用
场景:一个应用有三个服务:
web
服务:前端 Web 应用,使用 Nginx。app
服务:后端服务,使用 Python Flask。db
服务:数据库,使用 MySQL。
优化后的文件结构
myapp/
├── docker-compose.yml
├── app/
│ ├── Dockerfile
│ ├── app.py
│ └── requirements.txt
└── db/
docker-compose.yml 文件
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
networks:
- myapp_network
app:
build:
context: ./app
dockerfile: Dockerfile
networks:
- myapp_network
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: myapp
networks:
- myapp_network
networks:
myapp_network:
driver: bridge
app/Dockerfile 文件
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
app/requirements.txt 文件
flask
mysql-connector-python
app/app.py 文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Docker Compose!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
-
操作步骤
- 构建并启动服务:
docker-compose up --build
- 查看运行的容器:
docker-compose ps
- 停止服务:
docker-compose down
- 查看容器日志:
docker-compose logs
- 构建并启动服务:
-
应用网络配置
- Docker Compose 默认为每个项目创建独立的网络,服务之间通过服务名称通信。
- 例如:
app
服务可以通过db
直接访问数据库,无需额外配置 IP 地址。
-
扩展:多环境支持
- 使用
.env
文件管理环境变量。 - 在
docker-compose.yml
中通过${VAR_NAME}
引用环境变量。 - 示例
.env
文件:MYSQL_ROOT_PASSWORD=rootpassword MYSQL_DATABASE=myapp
- 修改
docker-compose.yml
:environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE}
- 使用
-
总结
Docker Compose 简化了多容器应用的管理流程,通过 YAML 文件定义服务间依赖、网络和存储配置,适合开发、测试和生产环境。