Docker Compose 是一种用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用一个 YAML 文件来配置应用程序服务,并使用单个命令来启动所有服务。以下是一个详细的使用实例,展示如何使用 Docker Compose 来管理一个简单的多容器应用。
1. 环境准备
假设我们有一个简单的应用程序,其中包含以下两部分:
- Web 应用:用 Python 和 Flask 框架构建的 Web 应用。
- 数据库:使用 MySQL 作为数据库。
2. 创建项目目录
在开始之前,先创建一个项目文件夹:
mkdir flask-docker-compose
cd flask-docker-compose
3. 创建 Flask 应用
在项目目录下,创建一个 app.py
文件,编写简单的 Flask 应用:
# app.py
from flask import Flask
import mysql.connector
app = Flask(__name__)
@app.route('/')
def hello_world():
db = mysql.connector.connect(
host="db", # 这里指向docker-compose配置中的服务名
user="root",
password="example",
database="test_db"
)
cursor = db.cursor()
cursor.execute("SELECT 'Hello, World!'")
result = cursor.fetchone()
return result[0]
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
4. 创建 requirements.txt
在同一目录下创建一个 requirements.txt
文件来管理 Python 依赖:
flask
mysql-connector-python
5. 创建 Dockerfile
为了容器化 Flask 应用,需要创建一个 Dockerfile
来定义如何构建应用的镜像:
# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制项目文件
COPY . /app
# 安装 Python 依赖
RUN pip install -r requirements.txt
# 设置环境变量
ENV FLASK_APP=app.py
# 暴露 Flask 服务的端口
EXPOSE 5000
# 启动 Flask 应用
CMD ["flask", "run", "--host=0.0.0.0"]
6. 创建 MySQL 数据库的 Docker 配置
接下来,创建一个 Docker Compose 文件 docker-compose.yml
,用来定义所有服务(包括 Flask 应用和 MySQL 数据库)的配置:
version: '3.8'
services:
# 定义 Flask 应用服务
web:
build: .
ports:
- "5000:5000"
depends_on:
- db
environment:
- FLASK_ENV=development
# 定义 MySQL 服务
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: test_db
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
7. 启动服务
在项目目录下执行以下命令来启动 Docker Compose 服务:
docker-compose up
该命令将自动构建 Flask 应用的 Docker 镜像,并启动 Flask 应用和 MySQL 服务。
8. 测试应用
启动成功后,打开浏览器并访问 http://localhost:5000
。如果一切顺利,您应该会看到页面显示 Hello, World!
,这表明 Flask 应用已成功连接到 MySQL 数据库并从中获取数据。
9. 其他常见 Docker Compose 命令
- 查看当前运行的容器:
docker-compose ps
- 停止服务:
docker-compose down
- 查看服务日志:
docker-compose logs
- 在后台运行 Docker Compose(不阻塞终端):
docker-compose up -d
10. 优化与扩展
如果你的应用更加复杂,比如需要连接缓存(如 Redis),你可以在 docker-compose.yml
中继续添加服务。例如,添加 Redis 服务:
redis:
image: redis
ports:
- "6379:6379"
然后,修改 Flask 应用或其他服务以便与 Redis 进行交互。
总结
通过 Docker Compose,您可以轻松地定义、运行和管理多容器应用。Compose 文件使得服务配置更加简洁明了,并能够快速启动和停止整个应用栈。使用 Docker Compose 的好处是,您可以将不同的服务(如数据库、缓存、Web 应用)组合在一起,避免了在不同的 Docker 容器中手动管理依赖项。
发表回复