专栏进度:02 / 03 (Docker 专题)
在本地开发时,最头疼的就是配环境:装数据库、设密码、配监听端口。Docker Compose 允许你用一个 .yml 文件定义所有的服务,然后执行一行命令,整个集群就会像乐团一样整齐划一地启动。

一、 核心概念:YAML 定义即架构

Docker Compose 的核心是 docker-compose.yml。它定义了三个关键要素:

Services (服务):你的容器镜像(Python 应用、数据库等)。

Networks (网络):让容器之间能通过“服务名”互相访问(比如 db:5432 而不是变化的 IP)。

Volumes (数据卷):保证数据库重启后,数据不会丢失。

二、 实战:一键拉起 Python + Redis 架构

假设你有一个 Web 应用,需要用 Redis 记录访问次数。

docker-compose.yml 模板:

YAML

version: ‘3.8’

services:
web:
build: . # 使用当前目录的 Dockerfile 构建
ports:
- “8000:8000”
volumes:
- .:/app # 代码热更新,修改本地代码容器立即生效
environment:
- REDIS_HOST=redis_service # 通过服务名访问
depends_on:
- redis_service # 确保 Redis 先启动

redis_service:
image: “redis:alpine” # 直接使用官方轻量镜像
注意 depends_on 关键字。它解决了服务启动的先后顺序问题,避免 Python 程序还没起来就因为连不上数据库而崩溃。

三、 生产级的环境变量管理

不要在 docker-compose.yml 中硬编码密码!

最佳实践:.env 文件

创建一个 .env 文件存储敏感信息。

在 YAML 中引用:POSTGRES_PASSWORD: ${DB_PASSWORD}。

安全提示:.env 严禁提交到 Git 仓库,而 .env.example 可以提交作为模板。

四、 常用命令:你的“指挥口令”

docker-compose up -d:后台一键启动所有服务(最常用)。

docker-compose ps:查看当前集群中所有服务的运行状态。

docker-compose logs -f web:实时查看 Python 服务的日志输出。

docker-compose down:优雅地停止并移除所有容器及网络。

五、 避坑指南:容器间的“捉迷藏”

痛点:为什么我的 Python 代码里连接 localhost:6379 会报错?
真相:在容器网络中,localhost 指向的是容器自己。要访问其他容器,必须使用 YAML 中定义的 Service Name。

更多推荐