Docker Compose 基础教程
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件,你可以配置应用程序需要的所有服务,然后使用一个命令即可从配置中创建并启动所有服务。1. 核心概念在使用 Docker Compose 时,有三个关键概念:服务 (Services): 一个应用容器。例如,一个 Python Web 应用、一个 Redis 数据库。网络 (Networks): 容器间的通信桥梁。卷 (Volumes): 用于持久化数据,确保容器重启后数据不丢失。2. 编写 docker-compose.yml这是 Docker Compose 的核心配置文件。YAMLversion: '3.8' # 建议使用的 Compose 文件格式版本
services:
web: # 服务名称
build: . # 使用当前目录下的 Dockerfile 进行构建
ports:
- "8000:8000" # 映射端口 [宿主机端口]:[容器内端口]
volumes:
- .:/code # 挂载当前目录到容器内的 /code 目录
depends_on:
- db # 确保 db 服务在 web 之前启动
db:
image: postgres:latest # 直接从 Docker Hub 使用现成的镜像
environment:
POSTGRES_DB: mydatabase
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data # 使用命名卷持久化数据库数据
volumes:
db_data: # 定义命名卷
- 常用命令速查表命令说明docker compose up核心命令:创建并启动所有服务容器docker compose up -d在后台(守护进程模式)运行docker compose down停止并移除容器、网络、镜像和卷docker compose ps列出所有运行中的容器docker compose logs -f查看实时日志(-f 表示持续输出)docker compose exec [service] [cmd]在正在运行的服务容器中执行命令docker compose build重新构建镜像4. 实操案例:Python + Redis 计数器为了方便理解,我们创建一个简单的 Python Web 应用。第一步:创建项目文件夹Bashmkdir my_project && cd my_project
第二步:准备 app.pyPython# 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! This page has been viewed {count} times.'
if name == "__main__":
app.run(host="0.0.0.0", port=8000)第三步:编写 DockerfileDockerfileFROM python:3.9-slim
WORKDIR /code
COPY . .
RUN pip install flask redis
CMD ["python", "app.py"]
第四步:编写 docker-compose.ymlYAMLversion: '3.8'
services:
web:
build: .
ports:
- "8000:8000"redis:
image: "redis:alpine"第五步:启动应用在目录下运行:Bashdocker compose up -d
现在访问 http://localhost:8000,你就能看到计数器在工作了!5. 最佳实践建议[!TIP]提示:环境变量管理: 敏感信息(如数据库密码)应存放在 .env 文件中,然后在 YAML 中使用 ${VARIABLE} 引用。镜像版本: 生产环境中,尽量避免使用 :latest 标签,建议指定具体版本号以保证稳定性。资源限制: 可以在 deploy 节点下限制 CPU 和内存,防止单个容器耗尽宿主机资源。