Docker Compose入门(2)
接前一篇文章: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: nginxports:- "80:80"# 错误的缩进
services:
web:image: nginxports:- "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: bridgevolumes: # 定义数据卷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
设置依赖关系,定义服务启动顺序。
更多内容请看下回。