Docker Compose入门指南:让多容器管理变得像搭积木一样简单

106 阅读3分钟

一、Docker Compose是什么?为什么你需要它?

如果你是Docker的新手,可能已经体验过用docker run启动单个容器的快乐。但现实中的项目往往需要多个容器协作:比如一个Web应用需要数据库+后端服务+前端页面,甚至还要挂载日志和配置文件。手动管理这些容器就像同时玩五个魔方——复杂又容易出错!

Docker Compose 就是来解决这个问题的!它通过一个简单的YAML配置文件docker-compose.yml),帮你一键启动、停止、重建整个应用栈。
它的核心思想是:“用代码定义环境”,让开发、测试、生产环境保持一致,告别“在我机器上能跑”的尴尬!


二、核心概念:5分钟搞懂配置文件

一个典型的docker-compose.yml长这样:

version: "3.8"  # 版本号(不同版本支持的功能不同)

services:        # 定义所有需要启动的容器
  web:           # 服务名称(自定义)
    image: nginx:latest  # 使用的镜像
    ports:
      - "80:80"          # 端口映射(主机:容器)
    volumes:
      - ./html:/usr/share/nginx/html  # 挂载本地目录到容器
    depends_on:          # 依赖关系
      - db

  db:
    image: mysql:5.7
    environment:         # 环境变量
      MYSQL_ROOT_PASSWORD: my-secret-pw
    volumes:
      - db_data:/var/lib/mysql  # 使用命名卷持久化数据

volumes:        # 声明卷(数据持久化的关键!)
  db_data:

关键词解释:

  • services:每个服务对应一个容器,可以设置镜像、端口、环境变量等。
  • volumes:数据卷,用于持久化存储(比如数据库文件)。
  • networks:自定义网络,让容器间通过服务名通信(默认会自动创建一个)!

三、常用命令:记住这5个就够了

# 启动所有服务(后台运行加 -d)
docker-compose up -d

# 停止并删除所有容器、网络
docker-compose down

# 查看运行中的服务状态
docker-compose ps

# 重启某个服务(比如修改了web服务的配置)
docker-compose restart web

# 查看服务日志(实时跟踪日志用 -f)
docker-compose logs -f db

四、隐藏特性:让开发效率翻倍的小技巧

1. 环境变量动态配置

docker-compose.yml中使用${VARIABLE},结合.env文件实现多环境配置:

# .env 文件(敏感信息别提交到Git!)
DB_PASSWORD=supersecret

# docker-compose.yml
environment:
  MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
2. 健康检查(Health Check)

确保服务完全启动后再连接依赖项:

services:
  web:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
3. 扩展配置(extends)

复用通用配置,避免重复代码:

# 公共配置
services:
  base:
    image: alpine
    volumes: ["./data:/data"]

  app1:
    extends: base
    command: ping docker.com

  app2:
    extends: base
    command: tail -f /dev/null

五、新玩法:开发者的骚操作

1. 一键搭建本地开发环境

用Compose整合你的IDE、数据库、Mock服务:

services:
  ide:
    image: codercom/code-server  # 网页版VS Code
    ports: ["8080:8080"]
  
  mock-api:
    image: mockoon/cli
    volumes: ["./mock-data.json:/data/mock.json"]
  
  redis:
    image: redis:alpine
2. 与CI/CD流水线结合

在GitLab CI或GitHub Actions中,用Compose启动测试环境:

# .gitlab-ci.yml 示例
test-job:
  script:
    - docker-compose up -d
    - run-tests.sh
    - docker-compose down
3. 模拟微服务网络

用自定义网络隔离服务,测试服务发现和负载均衡:

services:
  app:
    networks:
      - frontend
      - backend

networks:
  frontend:
  backend:

六、总结:你的下一步行动

Docker Compose不仅是容器编排工具,更是开发者的瑞士军刀。它让复杂环境的管理变得简单、可重复。建议从一个小项目开始实践,比如部署一个WordPress博客(包含MySQL和Web服务器),逐步探索更多高级功能!


你在使用Compose时遇到过哪些坑?欢迎评论区分享~~~