Docker Compose入门与实践指南

95 阅读3分钟

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

如果你已经接触过Docker,可能会发现它像是一个“魔法箱子”——把应用和依赖打包进去,轻松运行在任何地方。但现实中的项目往往需要多个“箱子”协作,比如一个Web应用可能需要后端服务+数据库+缓存服务,手动管理这些容器非常繁琐。

这时,Docker Compose登场了!它就像一位“乐高指挥官”,允许你通过一个简单的YAML配置文件,一键启动、停止、管理多个容器。无需手动敲一堆命令,只需写下“谁需要谁,怎么连接”,剩下的交给Compose!

二、5分钟入门:用Compose启动一个WordPress博客

1. 安装Docker Compose

如果你已经安装了Docker,通常docker-compose命令已经内置。检查一下:

docker-compose --version

如果未安装,参考官方文档快速安装。


2. 编写你的第一个docker-compose.yml

创建一个文件docker-compose.yml,内容如下:

version: "3.9"

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:
3. 一键启动!

在文件所在目录执行:

docker-compose up -d

访问http://localhost:8080,你的WordPress博客已经跑起来了!
停止所有服务?只需:

docker-compose down

三、Docker Compose的“隐藏玩法”(小白也能玩转!)

玩法1:一键搭建开发环境

你是否经历过“在我机器上是好的”的尴尬?用Compose统一开发环境:

services:
  web:
    build: .  # 使用当前目录的Dockerfile
    volumes:
      - ./code:/app  # 将本地代码挂载到容器
    ports:
      - "5000:5000"
  redis:
    image: redis

每次修改代码后,容器自动同步,无需重新构建!


玩法2:多项目联调

前端和后端分开开发?Compose让它们“握手”:

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - my-network

  backend:
    build: ./backend
    ports:
      - "8000:8000"
    networks:
      - my-network

networks:
  my-network:

前端通过http://backend:8000直接访问后端服务!


玩法3:定时任务自动化

想每天凌晨备份数据库?加个cron服务:

services:
  db-backup:
    image: alpine
    command: sh -c "echo '0 3 * * * pg_dump -U user db > /backup/db.sql' | crontab - && crond -f"
    volumes:
      - ./backup:/backup
    depends_on:
      - postgres

  postgres:
    image: postgres

玩法4:模拟微服务架构

启动多个实例并负载均衡:

services:
  web:
    image: my-web-app
    deploy:
      replicas: 3  # 启动3个实例
  nginx:
    image: nginx
    ports:
      - "80:80"
    depends_on:
      - web

玩法5:快速原型验证

想临时测试ELK日志系统?直接拉取现成镜像:

services:
  elasticsearch:
    image: elasticsearch:7.14.0
  kibana:
    image: kibana:7.14.0
    ports:
      - "5601:5601"
  logstash:
    image: logstash:7.14.0

四、Docker Compose的核心特性总结

  1. 声明式配置:用YAML文件描述“应用蓝图”,而非手动操作。
  2. 依赖管理:自动处理容器启动顺序(如数据库先于Web应用)。
  3. 环境隔离:每个服务独立运行,避免污染宿主机。
  4. 一键部署:无论是开发、测试还是生产,环境一致性保障。
  5. 可扩展性:轻松扩展服务实例数量,适应不同场景需求。

五、结语:你的容器世界,Compose来指挥!

Docker Compose将多容器管理的复杂性隐藏在一份优雅的配置文件中,让开发者更专注于业务逻辑。无论是个人项目还是团队协作,它都是提升效率的利器。

动手试试吧! 从今天起,告别繁琐的容器管理命令,让你的应用像乐高一样自由拼装!


小提示:遇到问题?尝试docker-compose logs [服务名]查看日志,或使用docker-compose config验证配置文件语法。欢迎在评论区分享你的Compose妙用! 🚀