Docker Compose 使用详解(从入门到实战)

Docker Compose 是基于 Docker 的多容器应用编排工具,可以用一个 YAML 文件定义多个服务,实现“一键启动整套系统”。

本文将系统讲解 Docker Compose 的使用方法,包括:安装、语法、核心命令、实战案例和生产建议。


一、Docker Compose 是什么?

Docker Compose 的作用是:

用一个文件管理多个容器服务

例如一个网站系统通常包含:

  • Web 服务(Nginx / Node.js)
  • 数据库(MySQL / PostgreSQL)
  • 缓存(Redis)

使用 Compose 后,只需:

docker compose up -d

即可全部启动。


二、安装 Docker Compose

1. 检查是否已安装(新版 Docker 自带)

docker compose version

如果有版本号,说明已经安装 ✔


2. 安装方式(Ubuntu)

sudo apt update
sudo apt install docker-compose-plugin -y

3. 验证安装

docker compose version

三、Docker Compose 核心文件(docker-compose.yml)

Compose 的核心是:

docker-compose.yml

1. 基本结构

version: "3.9"

services:
  app:
    image: nginx
    ports:
      - "8080:80"

2. 关键字段说明

字段作用
services定义服务
image使用的镜像
build本地构建
ports端口映射
volumes挂载目录
environment环境变量
depends_on依赖关系

四、Docker Compose 常用命令

1. 启动服务

docker compose up -d

2. 停止服务

docker compose down

3. 查看运行状态

docker compose ps

4. 查看日志

docker compose logs -f

5. 重启服务

docker compose restart

6. 重新构建

docker compose up -d --build

五、实战案例:Nginx + MySQL + Web

1. 项目结构

project/
 ├── docker-compose.yml
 ├── html/
 └── mysql/

2. 完整配置

version: "3.9"

services:
  web:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root123
      MYSQL_DATABASE: appdb
    ports:
      - "3306:3306"
    volumes:
      - ./mysql:/var/lib/mysql

3. 启动系统

docker compose up -d

4. 访问结果


六、进阶用法


1. 使用环境变量文件

创建:

.env

内容:

MYSQL_ROOT_PASSWORD=root123

引用:

environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

2. 构建自定义镜像

services:
  app:
    build: .

3. 多容器依赖控制

depends_on:
  - db

注意:只控制启动顺序,不保证“服务已就绪”


4. 重启策略

restart: always

常用:

  • no
  • always
  • on-failure
  • unless-stopped

七、生产环境最佳实践


1. 推荐目录结构

app/
 ├── docker-compose.yml
 ├── .env
 ├── services/
 └── data/

2. 使用固定版本镜像

❌ 不推荐:

image: nginx:latest

✔ 推荐:

image: nginx:1.25

3. 数据持久化必须做

volumes:
  - ./data:/var/lib/mysql

4. 使用独立网络

networks:
  app-net:

八、常见问题(FAQ)


1. docker compose not found

解决:

sudo apt install docker-compose-plugin

2. 容器启动失败

检查日志:

docker compose logs

3. 端口冲突

修改:

ports:
  - "8081:80"

4. 数据丢失

原因:没有挂载 volumes


九、Docker Compose 官方资料


十、总结

Docker Compose 的核心价值:

用一个 YAML 文件管理整个系统的生命周期

你只需要记住三件事:

  • docker compose up -d(启动)
  • docker compose down(停止)
  • docker compose logs(排错)

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部