Skip to content

Docker Compose

Docker Compose:用于定义和管理多容器应用的工具。它通过一个 YAML 文件来配置所有服务配置,用一条命令就能启动整个应用。Docker Compose 解决了多个容器之间的依赖关系和启动顺序问题,主要用于开发环境、测试环境和 CI/CD 流程中。Docker Compose 文件包含了容器镜像、端口映射、数据卷、环境变量等配置,所有配置集中在一个文件中,便于版本控制和团队协作。

Docker Compose 文件结构

Docker Compose 的核心是 docker-compose.yml 文件,它采用 YAML 格式定义服务、网络和卷。一个基本的 Compose 文件包含以下部分:

  • version:指定 Compose 文件格式版本,例如 '3.8'。
  • services:定义各个容器服务,每个服务对应一个容器。
  • networks:配置自定义网络。
  • volumes:声明数据卷。

YAML 文件使用缩进来表示层级关系冒号表示键值对连字符表示列表项

定义了一个 WordPress 的应用配置docker-compose.yml 示例

yaml
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:

这个 WordPress 的应用配置示例中展示了:

  • 两个服务:MySQL 数据库和 WordPress。
  • 自定义网络:frontend 和 backend。
  • 声明数据卷:数据卷 db_data 持久化数据库。
  • 设置环境变量:设置 MySQL 数据库和 WordPress 相关环境变量。
  • 端口映射:将容器 80 端口映射到主机 80 端口。
  • 服务依赖关系:确保数据库服务先启动。

docker-compose.yml配置说明

version

指定使用的 Compose 文件格式版本。不同版本支持的功能不同。目前常用的是 3.x 版本。版本号需要用引号包裹。

yaml
示例:
version: '3.8'

services

定义需要运行的容器服务,是 Compose 文件的核心部分。每个服务对应一个容器。服务名称自定义,作为容器的标识。

基本服务配置示例:

yaml
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

常用服务配置项:

  • image:指定使用的镜像名称和标签。可以从 Docker Hub 获取或使用本地构建的镜像。
  • build:如果使用本地 Dockerfile 构建镜像,需要指定构建路径。
yaml
build: ./dir
  • ports:设置端口映射,格式为 "主机端口:容器端口"。
yaml
ports:
  - "8080:80"
  • volumes:配置数据卷挂载,支持主机路径和命名卷。
yaml
volumes:
  - /host/path:/container/path
  - named_volume:/container/path
  • environment:设置环境变量,可以用列表或键值对格式。
yaml
environment:
  - VAR1=value1
  - VAR2=value2
  • depends_on:定义服务启动顺序,确保依赖服务先启动。
yaml
depends_on:
  - db
  • restart:设置容器重启策略,比如 always 表示总是自动重启。
yaml
restart: always
  • command:覆盖容器启动命令。
yaml
command: ["python", "app.py"]

完整服务示例:

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

networks

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

yaml
示例:
networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

服务中使用网络:

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

自定义网络提供更好的隔离性。不同网络的容器默认不能互相访问

volumes

声明数据卷。数据卷用于持久化存储和容器间共享数据。

yaml
示例:
volumes:
  db_data:
    driver: local
  app_data:
    driver: local

服务中使用卷:

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

卷数据独立于容器生命周期。删除容器不会删除卷数据。

Docker Compose 常用操作命令

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

最近更新