我们编程的时候常常需要定义配置文件,配置文件的格式也多种多样,有用php的数组格式的,有xml格式的,也有json格式的。
由于docker compose使用的配置文件是docker-compose.yml ,yml后缀的文件使用的是yaml语法,所以我们就来聊聊yaml语法。
YAML语言就是专门来写配置文件的语言,它的语法简洁,被很多人认为是可以超越xml和json的文件格式。
先用一个小例子,来体验下!
如果我们要用配置文件存储如下的数据,学校名叫小学,地址为上海松江小学,班级分为2个班级,分别是class1和class2,class1下面有小明,小红,小花三个学生,class2下面有大明,大红,大花三个学生。
json格式展示:
{
"school": "小学",
"address": "上海松江小学",
"class": {
"class1": [
"小明",
"小红",
"小花"
],
"class2": [
"大明",
"大红",
"大花"
]
}
}
php数组格式展示:
$school=[
'school'=>'小学',
'address'=>'上海松江小学',
'class'=>[
'class1'=>[
"小明",
"小红",
"小花"
],
'class2'=>[
"大明",
"大红",
"大花"
]
]
];
yaml格式展示:
school: 小学
address: 上海松江小学
class:
- class1:
- 小明
- 小红
- 小花
- class2:
- 大明
- 大红
- 大花
三种方式对比下,是不是觉得yaml格式写法很简洁,字符不需要加引号,也不需要用大括号来包裹数据,妈妈再也不用担心我大括号没有闭合啦。
了解了yaml的基本展示形式 ,下面来说说yaml语法。
yaml语法特点:
- 大小写敏感
- 通过缩进表示层级关系
- 禁止使用tab缩进,只能使用空格键
- 缩进的空格数目不重要,只要相同层级左对齐即可
- 使用#表示注释
yaml支持的数据结构
- 纯量:单个的、不可再分的值,包含字符串,布尔值,整数,浮点数,Null等
- 对象:键值对的集合
- 数组:一组按次序排列的值
纯量是最基本的、不可再分的值,写法如下:
#字符串默认不使用引号
str:这是一串文字
#如果字符串中有空格或者特殊字符需要放在引号中,且单双引号效果一样
newStr:'名字:张三'
#整数
number:12
#布尔值
isNumber: true
#null值用~来表示
name:~
对象是一组键值对,写法如下(注意字符前面的不是tab缩进,而是空格):
people:
name:张三
age:13
address:上海
数组是由一组连词线开头的行组成的,写法如下(注意字符前面的不是tab缩进,而是空格):
class:
-小明
-小红
-小花
数组和对象组合使用:
people:
name:张三
age:13
address:上海
class:
-小明
-小红
-小花
好了,关于yaml语法的常用内容就介绍到这里,我想大家对于yaml的语法有了一定的了解了。
接下来,我们来看看,docker compose.yml里面一些常用的配置项。
一份标准的docker-composer.yml文件分为三个部分,分别是version,services和networks。
version:"3" # 指定 compose 文件的版本,version 1被逐步废弃,最新的版本用3
services: # 对象格式定义所有的 service 信息
networks: # 对象格式定义 networks 信息
我们先来看看,这三个部分里面会有哪些选项,我们以nginx为例做说明:
#定义当前版本
version: "3"
#定义我们的服务对象
services:
#自定义的服务名称
nginx:
#镜像名称,默认拉取本地镜像,没有的话从远程获取
image: nginx:1.15.7-alpine
#自定义容器的名称
container_name: nginx15
#将宿主机的5000端口映射到容器的80端口
ports:
- "5000:80"
#将宿主机的./www目录和容器的/var/www/html目录进行绑定,并设置rw权限
#将宿主机的./conf/default.conf和容器的./conf/default.conf进行绑定
volumes:
- ./www/:/var/www/html/:rw
- ./conf/default.conf:/etc/nginx/conf.d/default.conf
#设置环境变量,当前的时区
environment:
TZ: "Asia/Shanghai"
#容器是否随docker服务启动重启
restart: always
#容器加入名为default的网络
networks:
- default
networks:
#创建了一个自定义的网络叫做default
default:
好了,以上便是yaml的语法以及docker compose配置项的一些基本说明,希望能帮助你理解docker-compose.yml文件。