Docker Compose(五)

5.Docker Compose

Docker Compose 是用于管理多容器应用的工具。它通过一个 YAML 文件集中配置多个服务,然后用一条命令即可启动整个应用。

它主要解决容器间的依赖关系和启动顺序问题,常用于开发、测试以及 CI/CD 环境,便于统一管理和团队协作。

一、安装

新版 docker 安装时已经集成了 docker compose

二、文件结构

1.概述

Docker Compose 通过 docker-compose.yml 文件(YAML 格式)来定义多容器应用。一个典型的 Compose 文件包含四个顶级元素:

  • version – 指定 Compose 文件格式版本(可选)
  • services​ – 定义各个容器服务(核心
  • networks – 配置自定义网络(可选)
  • volumes – 声明数据卷(可选)

YAML 语法小贴士:使用缩进表示层级,冒号 :​ 表示键值对,连字符 - 表示列表项。

2.示例

WordPress 应用配置

version: '3.8'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: wordpress
    networks:
      - backend

  wordpress:
    image: wordpress:latest
    ports:
      - "80:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: password
    depends_on:
      - db
    networks:
      - frontend
      - backend

networks:
  frontend:
  backend:

volumes:
  db_data:

示例要点

  • 两个服务:MySQL​、wordpress
  • 数据卷 db_data 持久化数据库
  • 环境变量配置数据库和 WordPress
  • 端口映射:主机 80​ → 容器 80
  • 服务依赖:wordpress​ 依赖 db(启动顺序)
  • 自定义网络:frontend​、backend

3.各组成部分详解

3.1 version

指定 Compose 文件格式版本(需引号包裹)。常用版本:3.8​、3.9 等。版本需与安装的 Docker Compose 兼容。

version: '3.8'

若不指定,默认使用最新版本,但建议显式声明。

3.2 services

定义运行的容器服务,是 Compose 文件的核心。每个服务对应一个容器,服务名称自定义。

基本结构:

services:
  服务名称:
    配置项: 

常用配置项:

配置项 说明 示例
image 使用的镜像(来自仓库或本地) image: nginx:latest
build 使用本地 Dockerfile 构建 build: ./dir
ports 端口映射 "宿主机:容器" - "8080:80"
volumes 挂载卷(主机路径或命名卷) - /host/data:/container/data
environment 设置环境变量 - ENV_VAR=value
depends_on 声明服务依赖(控制启动顺序) - db
restart 重启策略(如 always restart: always
command 覆盖容器默认启动命令 command: ["python", "app.py"]

服务配置示例:

services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    environment:
      FLASK_ENV: development
    depends_on:
      - redis
  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data

3.3 networks

定义自定义网络。容器可通过网络名称互相通信。默认创建 bridge 驱动网络。

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

服务中使用网络:

services:
  web:
    networks:
      - frontend
  db:
    networks:
      - backend

隔离性:不同网络的容器默认不能互相访问。

3.4 volumes

声明数据卷,用于持久化存储和容器间共享数据。卷数据独立于容器生命周期(删除容器不删卷)。

volumes:
  db_data:      # 可指定驱动,默认 local
  app_data:

服务中使用卷:

services:
  db:
    volumes:
      - db_data:/var/lib/mysql

三、常用操作命令

功能 命令 说明
启动服务 docker-compose up -d 在后台启动所有服务,-d 表示 detached 模式
停止服务 docker-compose down 停止并移除所有容器、网络和卷
查看状态 docker-compose ps 显示各容器的运行状态
查看日志 docker-compose logs 输出容器日志,加 -f 可以跟踪实时日志
构建镜像 docker-compose build 如果服务使用本地 Dockerfile,docker-compose build 会重新构建镜像
重启服务 docker-compose restart 重启所有服务或指定服务
单服务操作 docker-compose start wordpress 可以针对单个服务执行命令