docker-compose.yml文件编写规则

目录

基本结构

配置示例

主要配置选项说明

文件结构和主要配置项

1. version

2. services

3. volumes

4. networks

总结


基本结构

version: '3'  # Docker Compose 文件的版本
services:     # 定义服务
  service_name:
    image: image_name:tag    # 使用的镜像和标签
    build: .                 # 构建镜像的上下文目录
    ports:
      - "host_port:container_port"   # 主机端口和容器端口的映射
    volumes:
      - ./local_path:/container_path  # 主机目录和容器目录的挂载
    environment:
      - ENV_VAR_NAME=value      # 设置环境变量
    networks:
      - network_name            # 网络配置
    depends_on:
      - other_service           # 依赖于其他服务
    restart: always            # 容器重启策略
    command: command_to_run    # 容器启动时运行的命令
volumes:                          # 定义数据卷
  volume_name:
networks:                         # 定义网络
  network_name:

配置示例

以下是一个包含常见配置的完整示例 docker-compose.yml 文件:

version: '3'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - webnet

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: mydatabase
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - webnet

  redis:
    image: redis:latest
    networks:
      - webnet

volumes:
  db_data:

networks:
  webnet:

主要配置选项说明

  • version: 定义 Docker Compose 文件的版本。通常使用 33.x 版本。

  • services: 定义所有服务。每个服务都可以有以下配置:

    • image: 指定要使用的 Docker 镜像。
    • build: 指定 Dockerfile 的上下文路径,如果需要构建镜像。
    • ports: 映射主机和容器的端口。
    • volumes: 挂载主机和容器的目录或数据卷。
    • environment: 设置环境变量。
    • networks: 连接到一个或多个网络。
    • depends_on: 指定依赖关系,确保服务启动顺序。
    • restart: 容器的重启策略。
    • command: 覆盖容器启动时的默认命令。
  • volumes: 定义数据卷,用于持久化数据。

  • networks: 定义网络,服务可以在这些网络中进行通信。

文件结构和主要配置项

1. version
  • 说明: 指定 Docker Compose 文件的版本。
  • 示例: version: '3'
  • 作用: 不同版本可能支持不同的功能,选择合适的版本可以确保与 Docker Engine 的兼容性。
2. services
  • 说明: 定义一个或多个服务,每个服务对应一个 Docker 容器。

  • 结构:

    services:
      service_name:
        image: image_name:tag
        build: .
        ports:
          - "host_port:container_port"
        volumes:
          - ./local_path:/container_path
        environment:
          - ENV_VAR_NAME=value
        networks:
          - network_name
        depends_on:
          - other_service
        restart: always
        command: command_to_run
    

  • 常见配置项:

    • image: 使用的 Docker 镜像及其标签。示例: nginx:latest
    • build: 指定 Dockerfile 的上下文路径。如果不指定镜像而提供构建上下文,则会根据 Dockerfile 构建镜像。示例: build: . 表示当前目录。
    • ports: 端口映射,将主机的端口映射到容器的端口。示例: - "80:80"
    • volumes: 挂载目录或数据卷。示例: - ./data:/data 将主机的 ./data 目录挂载到容器的 /data 目录。
    • container_name: 是一个用来指定容器名称的字段。它的作用是为通过 Docker Compose 启动的容器指定一个自定义的名称,而不是让 Docker 自动分配一个名称。
    • environment: 设置环境变量。示例: - ENV_VAR_NAME=value
    • networks: 指定容器连接到的网络。示例: - webnet
    • depends_on: 指定服务之间的依赖关系,确保启动顺序。示例: - db
    • restart: 定义容器的重启策略。选项包括 noalwaysunless-stoppedon-failure。示例: restart: always
    • command: 启动容器时运行的命令。如果指定,覆盖 Dockerfile 中的默认命令。示例: command: ["python", "app.py"]
3. volumes
  • 说明: 定义 Docker 卷,用于持久化和共享数据。
  • 示例:
    volumes:
      db_data:
    
  • 作用: 数据卷可以跨容器共享,并在容器重启或删除后保持数据。
4. networks
  • 说明: 定义网络,服务可以在这些网络中进行通信。
  • 示例:
    networks:
      webnet:
    
  • 作用: 创建自定义网络可以帮助服务之间进行隔离和通信。

总结

docker-compose.yml 文件的配置项帮助我们定义和管理多容器应用程序的各个方面。通过以下方式进行管理:

  • 版本 (version): 确保 Docker Compose 文件的兼容性。
  • 服务 (services): 定义和配置容器服务,包括镜像、端口、卷、环境变量等。
  • 数据卷 (volumes): 提供持久化存储,确保数据在容器之间共享和保留。
  • 网络 (networks): 定义容器的网络配置,允许容器之间的通信和隔离。

知识点扩展: 

docker-compose.yml 文件中,volumesvolumes 块(或 volumes:)之间有一些区别:

1. volumes 字段

service 的定义中,可以直接指定一个 volumes 字段来指定挂载的卷。例如:

version: '3'
services:
  web:
    image: nginx
    volumes:
      - /path/on/host:/path/in/container

这里的 volumes 字段直接将 /path/on/host 挂载到了 /path/in/container。这种方式是最简单和常见的方式来指定挂载卷。

2. volumes

volumes 块通常用于在 docker-compose.yml 文件的顶层定义卷,可以在多个服务之间共享。它的作用是预先声明卷,然后在服务的定义中引用它们。例如:

version: '3'
services:
  web:
    image: nginx
    volumes:
      - shared-data:/path/in/container

  db:
    image: mysql
    volumes:
      - shared-data:/var/lib/mysql

volumes:
  shared-data:

这里的 volumes 块定义了一个名为 shared-data 的卷。在 webdb 两个服务的定义中,通过 volumes 字段引用了这个卷。这种方式可以确保多个服务可以访问和共享相同的卷。

  • volumes 字段 在服务定义中直接指定了挂载的卷,适用于单个服务的简单场景。
  • volumes 用于在 docker-compose.yml 文件的顶层定义卷,允许多个服务共享相同的卷,提供了更大的灵活性和重用性。
  • 23
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZZDICT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值