Docker Compose入门(2)

发布于:2025-08-02 ⋅ 阅读:(14) ⋅ 点赞:(0)

接前一篇文章:Docker Compose入门(1)

 

本文内容参考:

Docker Compose(容器编排)-CSDN博客

Docker Docker-Compose Dockerfile基本使用教程_docker-compose dockerfile-CSDN博客

dockerFile和docker-compose.yml_dockerfile 和 yaml-CSDN博客

Docker Compose完整教程-CSDN博客

特此致谢!

 

二、Docker Compose文件(docker-compose.yml)

1. 语法

(1)YAML简介

YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化标准。其基本语法规则如下:

  • 缩进表示层级关系
# 正确的缩进(使用空格,不要用Tab)
services:
  web:
    image: nginx
    ports:
      - "80:80"
  
# 错误的缩进
services:
web:
  image: nginx
 ports:
   - "80:80"
  • 冒号后必须有空格
# 正确
key: value
 
# 错误
key:value
  • 列表的表示
# 列表语法
fruits:
  - apple
  - banana
  - orange
 
# 或者内联形式
fruits: [apple, banana, orange]
  • 字符串可以有引号或无引号

# 这些都是有效的
name: John
name: "John"
name: 'John'
 
# 特殊字符需要引号
message: "Hello: World"
path: "C:\\Users\\Name"
  • 布尔值和数字
# 布尔值
enabled: true
disabled: false
 
# 数字
port: 8080
pi: 3.14

(2)语法版本

目前官方支持三个大版本, 即Version 1、Version 2和Version 3。其中,Version 1已经被废弃掉了。当前最新的版本是3.8,它支持的Docker Engine版本不得低于19.03.0。

(3)YAML在Docker Compose中的应用

version: '3.8'           # 版本号
services:                # 服务定义
  service1:             
    # 服务1配置
  service2:
    # 服务2配置
volumes:                 # 数据卷定义
  volume1:
networks:                # 网络定义
  network1:

2. docker-compose.yml文件详解

(1)文件结构概览

version: '3.8'                    # Compose文件格式版本
 
services:                         # 定义服务
  web:                           # 服务名称
    # 服务配置
  db:
    # 数据库配置
 
volumes:                          # 定义数据卷
  data:                          # 数据卷名称
 
networks:                         # 定义网络
  frontend:                      # 网络名称
  backend:
 
configs:                          # 定义配置文件(可选)
secrets:                          # 定义敏感数据(可选)
version: "3.8" # 定义版本, 表示当前使用的 docker-compose 语法的版本
services: # 服务,可以存在多个
  servicename: # 服务名字,它也是内部 bridge 网络可以使用的 DNS name,如果不是集群模式相当于 docker run 的时候指定的一个名称
    image: # 必选,镜像的名字
    command: # 可选,如果设置,则会覆盖默认镜像里的 CMD 命令
    environment: # 可选,等价于 docker container run 里的 --env 选项设置环境变量
    volumes: # 可选,等价于 docker container run 里的 -v 选项绑定数据卷
    networks: # 可选,等价于 docker container run 里的 --network 选项指定网络
    ports: # 可选,等价于 docker container run 里的 -p 选项指定端口映射
    expose: # 可选,指定容器暴露的端口
    build: #构建目录
    depends_on: #服务依赖配置
    env_file: #环境变量文件
 
  servicename2:
    image:
    command:
    networks:
    ports:
  servicename3:
  #...
networks:  # 定义网络
  my-network:
    driver: bridge
 
volumes:   # 定义数据卷
  db-data:
    external: true

(2)关键层级说明

  • version

指定Compose文件语法版本(如3.8),不同版本支持的功能不同。

  • services

定义各个容器服务,每个服务对应一个容器或一组容器。

  • image

指定服务使用的镜像,可以是本地镜像或远程仓库镜像,建议避免使用latest标签,以免版本不一致导致问题。

  • volumes

定义数据卷,用于持久化存储。

  • networks

自定义容器间通信的网络(如bridge、overlay)。

  • command

覆盖容器启动的默认命令。

  • environment  & env_file

添加环境变量。可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保YAML解析器不会将其转换为True或False。从文件读取变量优先级低于enviroment。

  • ports

指定端口映射。

  • build

用于基于Dockerfile构建镜像,支持指定构建上下文、Dockerfile文件名及构建参数。

  • depends_on

设置依赖关系,定义服务启动顺序。

 

更多内容请看下回。

 


网站公告

今日签到

点亮在社区的每一天
去签到