1.  Service configuration

Compose file 是一个YAML文件,用于定义 servicesnetworks, 和 volumes。其默认路径是./docker-compose.yml

一个service定义包含了这个服务启动的所有容器的配置,这个操作看起来很像是传递命令行参数给docker container create命令。同样,network和volume定义类似于docker network create 和 docker volume create命令。

与 docker container create 一样,在Dockerfile中指定的选项(比如:CMD、 EXPOSE、 VOLUME、 ENV等)也是一样的,你不需要在docker-compose.yml中再次指定它们。

1.1.  build

应用于构建时的配置选项

build指定了构建上下文路径

或者,也可以用一个包含context和可选的dockerfile及args的对象类指定

如果在指定build的同时还指定了image,那么将会用指定的镜像来构建

1.2.  context

指向包含Dockerfile目录的路径,或者指向git仓库的url

如果这个值是相对路径,那么它相对的是compose file所在的位置(PS:其实就是当前目录)

1.3.  Dockerfile

你也可以用Dockerfile来构建,不过这个时候必须指定context

(PS:dockerfile是用来生成镜像的,也就是说构建的时候可以从image构建,也可以从dockerfile构建,是一样的)

1.4.  args

添加构建参数,这些环境变量只能在构建过程中访问

首先,在Dockerfile中定义变量

然后,在构建的时候给这些变量赋值

或者,下面这种写法也是可以的

注意:如果在Dockerfile中,ARG在FROM指令之前,那么在FROM指令下ARG不可用

你也可以在构建参数中省略它们的值,这种情况下会从Compose运行的环境中取值(PS:其实就是环境变量)

1.5.  cache_from

缓存的镜像列表

1.6.  shm_size

为这个构建的容器设置/dev/shm分区的大小

1.7.  configs

授权某个服务可以访问它下面配置的configs,支持两种语法

1.7.1.  短语法

短语法只指定config名称,授权容器可以访问config,并将其挂载到该容器下的/<config_name>

下面的例子授权redis服务访问my_config和my_other_config配置。my_config的值设置的是./my_config.txt,而my_other_config的值指定的是外部资源,这就意味着该值已经被定义在Docker中了。

1.7.2.  长语法

长语法提供了更细粒度的控制

  • source  :config的名称
  • target  :被挂载到容器后的文件名称,默认是/<source>
  • uid和gid  :被挂载到容器的文件的所有者和所属组ID
  • mode  :被挂载到容器中的文件的权限(PS:如果你不熟悉UNIX的权限模式,可以用这个工具 http://permissions-calculator.org

下面这个例子将在容器下设置my_config和redis_config,设置权限是0440,所有者和所属组都是103,redis服务不可以访问my_other_config配置

1.8.  container_name

自定义容器名称,而不是用默认生成的名称

1.9.  depends_on

表示服务之间的依赖关系,服务依赖关系导致以下行为:

  • docker-compose up  按照依赖顺序启动服务
  • docker-compose up SERVICE  自动包含服务的依赖
  • docker-compose stop  按照依赖顺序停止服务

下面的例子中,db和redis会先于web启动,启动web的时候也会创建并启动db和redis,web停止之前会先停止db和redis

注意:depends_on不会等待db和redis启动好了再启动web

1.10.  deploy

只有在集群方式部署的时候这个配置才有效

1.10.1.  mode

global(每个集群节点只有一个容器) 或者 replicated (指定数量的容器)。默认是 replicated

1.11.  env_file

添加一个环境变量文件,可以是单个值或者一个列表

如果同一个变量出现在多个文件中,则后者覆盖前者

1.12.  environment

添加一个环境变量,可以覆盖env_file中同名的变量值

1.13.  expose

在不将端口发布到主机的情况下公开端口

1.14.  image

指定容器从哪个镜像启动,可以是镜像ID,也可以是镜像tag

1.15.  network_mode

网络模式

1.16.  ports

端口,两种语法

短语法

长语法

1.17.  restart

重启策略,默认是no

1.18.  ulimits

覆盖容器默认的ulimits

1.19.  volumes

挂载主机的路径或volumes名称

你可以为单个服务挂载一个主机路径,这个时候就没有定义顶级的volumes了。但是,如果你希望多个服务复用一个volumes,那么这个时候就要定义在顶级了。

短语法

指定主机上的路径(HOST:CONTAINER),或者一个访问模式(HOST:CONTAINER:ro)

(PS:稍微解释一下,比如/opt/data:/var/lib/mysql表示挂载到主机的路径是/opt/data,挂载到容器的路径是/var/lib/mysql,其实挂载可以理解为映射)

长语法

  • type  :挂载类型(volume, bind,tmpfs)
  • source  :挂载的源
  • target  :volume被挂载到容器中的路径
  • read_only  :设置只读
  • propagation  :bind的额外选项
  • nocopy  :volume的额外选项,表示当volume创建的时候是否禁止从容器上复制数据
  • size  :tmpfs的额外选项,表示挂载的字节大小

1.20. 指定时长与字节值

时长支持的单位:us,ms,s,m,h

字节大小支持的单位:b,k,m,g 或者 b,kb,mb,gb

2.  Volume configuration

下面的例子展示了两个服务,一个数据库的数据目录以一个volumn的形式与另一个服务共享,以至于它可以周期性的备份数据:

顶级volumns可以是空的,此时它使用Docker引擎默认提供的驱动(大多数情况下是local)来配置。你也可以指定下列key

3.  示例

4.  文档

https://docs.docker.com/compose/compose-file/

https://docs.docker.com/compose/reference/

http://permissions-calculator.org

https://yaml.org

Docker Compose file的更多相关文章

  1. kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources

    Share Process Namespace between Containers in a Pod how to configure process namespace sharing for a ...

  2. Docker 核心技术之Docker Compose

    Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...

  3. [Docker] Converting from Docker Compose to Kubernetes

    kompose is a tool to help users who are familiar with docker-compose move to Kubernetes. kompose tak ...

  4. deepin 15.11 升级docker-ce 18.01到19.03.1,升级docker compose 1.23到1.24.1

    1.升级docker compose ,docker官方安装方法 $ sudo curl -L "https://github.com/docker/compose/releases/dow ...

  5. 基于Docker Compose部署分布式MinIO集群

    一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...

  6. Docker Compose to CoreOS

    taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...

  7. Docker Compose—简化复杂容器应用的利器

    Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...

  8. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  9. Docker Compose容器编排

    Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...

随机推荐

  1. 【原创】这道Java基础题真的有坑!我也没想到还有续集。

    前情回顾 自从我上次发了<这道Java基础题真的有坑!我求求你,认真思考后再回答.>这篇文章后.我通过这样的一个行文结构: 解析了小马哥出的这道题,让大家明白了这题的坑在哪里,这题背后隐藏 ...

  2. python基础知识第四篇(元组)

    元组 list列表 li[11,22,33,44]列表和元组的区别:元素不可被修改,不可被增加或者删除(一级元素),列表则相反 tuple元组 tu=(111,222,333,444) 支持索引取值 ...

  3. [译]C# 7系列,Part 2: Async Main 异步Main方法

    原文:https://blogs.msdn.microsoft.com/mazhou/2017/05/30/c-7-series-part-2-async-main/ 你大概知道,C#语言可以构建两种 ...

  4. DevExpress的GridControl的使用以及怎样添加列和绑定数据源

    场景 Winform控件-DevExpress18下载安装注册以及在VS中使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1 ...

  5. Linux 命令行初始化MySQL数据库

    作为一个技术纯小白,在Linux服务器初始化MySQL数据库的时候遇到了一点小问题: ​ 1.不会使用MySQL图形工具,几乎没玩过 ​ 2.客户的VPN没有开放3306端口,没法用navicat等工 ...

  6. 面试连环炮系列(四):说说TCP的三次握手过程

    说说TCP三次握手的过程? 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认. 第二次 ...

  7. ASP.NET Aries 高级开发教程:行内编辑事件怎么新增数据到后台(番外篇)

    前提: 今天又网友又提出了一个问题,说行内编辑保存之前,怎么新增一些数据提交到后台? 对方说看了源码,也没找到怎么处理,这里就写文给解答一下. 解答: 于是我看了一眼源码,只能说你没找到地方: 第12 ...

  8. IT兄弟连 HTML5教程 CSS3属性特效 文字描边

    用CSS3实现的文字描边效果,一个CSS3文字特效实例,字体可以自己随意改,字体颜色也可以自己改.IE9以下浏览器无效果,所以提醒大家测试时候要使用Google Chrome.-webkit-text ...

  9. swoole简介

    swoole是PHP的扩展,又不是一个普通的扩展.普通的扩展只是提供一个库函数.而swoole扩展在运行后会接管PHP的控制权,进入事件循环.当IO事件发生后,swoole会自动回调指定的PHP函数. ...

  10. BearerToken之JWT的介绍

    Bearer认证 HTTP提供了一套标准的身份验证框架:服务器可以用来针对客户端的请求发送质询(challenge),客户端根据质询提供身份验证凭证.质询与应答的工作流程如下:服务器端向客户端返回40 ...