Docker Compose file
1. Service configuration
Compose file 是一个YAML文件,用于定义 services, networks, 和 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
Docker Compose file的更多相关文章
- 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 ...
- Docker 核心技术之Docker Compose
Docker Compose 简介 Docker Compose是什么? Docker Compose是一个能一次性定义和管理多个Docker容器的工具. 详细地说: Compose中定义和启动的每一 ...
- [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 ...
- 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 ...
- 基于Docker Compose部署分布式MinIO集群
一.概述 Minio 是一个基于Go语言的对象存储服务.它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片.视频.日志文件.备份数据和容器 ...
- Docker Compose to CoreOS
taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker Compose容器编排
Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...
随机推荐
- 大白话简单工厂模式 (Simple Factory Pattern)
大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...
- CSS 计数器详解
在前端开发中总少不了列表项,对于列表项序号,射鸡师一般会列出个1,2,3...序号.在不了解css计数器属性之前,我一般会用精灵图,用类名来区分序列号图片.这样做尽管可以达到目的,但是很不方便,开发过 ...
- ubuntu14.04编译vim8.1
安装依赖 这一步其实我没做,直接下载编译成功了.估计有些包不是必需的.姑且列在这里供参考 sudo apt install libncurses5-dev libgnome2-dev libgnome ...
- Cocos2dLua3.17.2集成FairyGUI(一)
版本说明:使用cocos2d-lua3.17.2版本 FairyGUI下载好链接地址是:https://github.com/fairygui/FairyGUI-cocos2dx 首先创建cocos项 ...
- CentOS 上配置 lua 的服务器环境(enet)
安装 lua & luarocket 安装依赖 $ yum install gcc gcc-c++ kernel-devel $ yum install readline-dev $ yum ...
- Castle DynamicProxy基本用法(AOP)
本文介绍AOP编程的基本概念.Castle DynamicProxy(DP)的基本用法,使用第三方扩展实现对异步(async)的支持,结合Autofac演示如何实现AOP编程. AOP 百科中关于AO ...
- Leetcode547: Friend Circles 朋友圈问题
问题描述 在一个班级里有N个同学, 有些同学是朋友,有些不是.他们之间的友谊是可以传递的比如A和B是朋友,B和C是朋友,那么A和C也是朋友.我们定义 friend circle为由直接或者间接都是朋友 ...
- Spring Cloud Finchley.SR1 版本的坑:placeholer占位符无法解析!
接入nacos 之后,想把所有的配置丢上去. 启动程序是: @EnableDiscoveryClient @RestController @ComponentScan(basePackages = { ...
- python函数编程-装饰器decorator
函数是个对象,并且可以赋值给一个变量,通过变量也能调用该函数: >>> def now(): ... print('2017-12-28') ... >>> l = ...
- Consul初探-集成ocelot
前言 由于 Consul 的高可用性.丰富的API.友好的 Web 控制台界面等特点,Consul 的发展非常迅猛,得益于 .NETCore 社区的快速发展和社区成员的贡献,我们现在可以非常方便快速的 ...