Docker Compose 入门与实用指南

2.043k 字  |  7 分钟

Docker Compose 是 Docker 提供的一个用于 多容器应用部署与管理的编排工具。通过一个 docker-compose.yml 文件,你可以轻松地定义与启动一个复杂的应用程序,包括数据库、后端、前端、缓存等多个服务。

本文将从原理、优势、核心概念、常用指令、示例、最佳实践几个方面进行讲解,帮助你快速掌握 Docker Compose。


一、Docker Compose 是什么?

在部署应用时,你可能需要:

  • 一个 Nginx 容器做反代
  • 一个 Node.js 容器跑后端
  • 一个 MySQL 容器存数据库
  • 一个 Redis 容器做缓存

如果你用普通的 docker 命令:每个容器都要手动 docker run,配置环境变量、网络、端口映射非常麻烦。

Docker Compose 的作用就是:

用一个 YAML 文件统一定义所有服务,并通过一条命令完成启动、停止、更新、日志查看等操作。


二、Docker Compose 的核心优势

1. 用一个文件定义整个应用

所有服务配置集中在 docker-compose.yml 文件中,一目了然。

2. 一条命令启动所有容器

docker compose up -d

3. 自动创建隔离网络

服务之间可以直接用服务名通信,例如:

  • backend 连接 mysql:3306
  • php 连接 redis:6379

无需手写 IP。

4. 环境变量管理方便

支持 .env 文件,不用把密码写硬编码在 yml 中。

5. 适合开发、测试、个人部署

Compose 更适合本地或单机环境。多机部署则需要 Swarm 或 Kubernetes。


三、docker-compose.yml 文件结构

一个典型 Compose 文件如下:

version: "3.9"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - backend

  backend:
    build: ./app
    environment:
      - DB_HOST=mysql
      - DB_USER=root
    depends_on:
      - mysql

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

解释

  • services::定义多个容器服务。
  • webbackendmysql:每一个都是一个独立容器。
  • volumes::声明持久化存储卷。
  • depends_on::定义启动顺序。

四、Docker Compose 常用命令

启动服务

docker compose up

后台运行:

docker compose up -d

停止服务

docker compose down

查看日志

docker compose logs -f

重启/更新容器

docker compose restart

构建服务(当 Dockerfile 有改动)

docker compose build

五、Compose 示例:部署一个完整博客系统(Nginx + PHP + MySQL)

version: "3.9"
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./html:/var/www/html
    depends_on:
      - php

  php:
    image: php:8-fpm
    volumes:
      - ./html:/var/www/html
    depends_on:
      - mysql

  mysql:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

运行:

docker compose up -d

你就拥有一个可运行的博客环境了。


六、最佳实践

1. 使用 .env 文件管理环境变量

.env 内容:

MYSQL_ROOT_PASSWORD=123456

然后在 yml 中使用:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

2. 尽量使用 volume 持久化数据

否则你重建容器时数据库会丢失。

3. 使用 build + Dockerfile 为后端构建镜像

这样更新代码更方便。

4. 用 depends_on 控制启动顺序

防止数据库未启动就访问。


七、Compose 适合什么场景?

场景是否适合原因
本地开发✔️快速部署一套环境
个人 VPS✔️单机使用最合适
小规模私有服务✔️维护简单
企业级高可用集群需要 K8S / Swarm
多服务器负载均衡Compose 不支持分布式

八、总结

Docker Compose 是:

  • 单机上管理多容器应用的最佳工具
  • 使用简单、结构清晰
  • 非常适合开发者、个人云服务、小型运维场景

你只需要一个 docker-compose.yml 文件,就能把复杂的架构简化为“一条命令启动”。

评论(没有评论)

谢谢你请我喝咖啡~

扫码打赏,支持一下