docker-compose.yml文件配置使用的yaml语言
YAML 是一种简洁的非标记语言。YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。
首先推荐一个自动检测YAML 语法的网址: http://nodeca.github.io/js-yaml/
基本规则
-
大小写敏感
-
使用缩进表示层级关系
-
禁止使用tab缩进,只能使用空格键
-
缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
-
使用#表示注释
-
字符串可以不用引号标注
YAML中允许表示三种格式,分别是常量值,对象和数组
言归正传到docker-compose.yml文件配置
docker-compose.yml 文件不仅指定正在使用的容器,还指定如何单独配置各容器。常用的配置项如下所示:
-
build:定义镜像生成,可以指定Dockerfile文件所在的目录路径,支持绝对路径和相对路径;
-
image:从指定的镜像中启动容器,可以是存储仓库、标签以及镜像 ID,如果镜像不存在,Compose 会自动拉去镜像;
-
environment:定义环境变量和配置;
-
ports:定义端口映射,比如上面配置中将容器上的公开端口 80 转接到主机上的外部端口 9901和9902;
-
depends_on,定义依赖关系。此定义会让当前服务处于等待状态,直到这些依赖服务启动。比如某个服务依赖数据库服务,那么通过此配置解决了服务的启动顺序的问题;
-
volumes,挂载一个目录或者一个已存在的数据卷容器,可以直接使用 HOST:CONTAINER 这样的格式,或者使用 HOST:CONTAINER:ro 这样的格式,后者对于容器来说,数据卷是只读的,这样可以有效保护宿主机的文件系统;
-
context,指定Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url;
-
args,指定构建参数,这些参数只能在构建过程中访问;
-
target,定义构建指定的阶段Dockerfile,比如针对不同阶段使用不同的dockerfile,开发阶段使用支持编译调试的dockerfile,而生产环境,则使用轻量级的dockerfile;command,覆盖默认命令;
-
container_name,指定自定义容器名称,而不是生成的默认名称。
-
depends_on:解决了容器的依赖、启动先后的问题
- container_name:全控制容器的命名,可以使用这个标签指定
- build:服务除了可以基于指定的镜像,还可以基于一份 Dockerfile,在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器
build: /path/to/build/dir # 也可以是相对路径,只要上下文确定就可以读取到 Dockerfile。 build: ./dir # 设定上下文根目录,然后以该目录为准指定 Dockerfile。 build: context: ../ dockerfile: path/of/Dockerfile
注:如果你同时指定了 image 和 build 两个标签,那么 Compose 会构建镜像并且把镜像命名为 image 后面的那个名字。
entrypoint: /code/entrypoint.sh
expose:用于指定暴露的端口,但是只是作为一种参考,实际上docker-compose.yml的端口映射还得ports这样的标签。
例子:
version: "3" services: zzyly: image: zzytest container_name: zzyly ports: - 80:8080 entrypoint: ["python","main.py"]
总是总是报错:yaml.scanner.ScannerError:mapping values are not allowed here in "./docker-compose.yaml",line2,column 8
出现这个错误的是因为yaml格式不正确,谷歌定义的yaml格式太严格了,每个冒号后面都必须带有空格!!!
参考:https://blog.csdn.net/liguangxianbin/article/details/79492866