【容器化进阶】第二篇:Docker Compose —— 编排你的微服务“小队”
专栏进度: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。
更多推荐
所有评论(0)