阿里容器服务-编排模板语法简介
容器服务支持Docker Compose编排模板来描述多容器应用。
作用:
用于描述一个完整的应用,该应用可由好多个服务组成。例如一个web,他是由nginx/httpd+php+mysql组成。甚至可以根据服务量启动两个甚至更多的容器。
能力:
容器服务支持通过编排模板文件,自动化地部署和管理一个容器应用。
编排模板文件使用的标签兼容大部分 Docker Compose 1.5.x 到 1.7.x 版本实现的标签。有关具体兼容的标签,参见 标签说明。
编排模板文件也支持 Compose V1 和 V2 两种不同版本的模板格式。更多详细信息,参见 文档。
容器服务也在社区版本之上提供了很多扩展能力:
与社区的 Docker Compose 和 Swarm 不同,阿里云容器服务支持跨节点的容器连接(link),所以您可以直接将 Docker Compose 模板描述的应用部署到分布式集群上来提供高可用性和可伸缩性。
容器服务也在社区 Compose 模板描述的基础上提供了一系列扩展来简化 Web、微服务应用的部署和运维。这就是容器里的标签
直接从一个例子看
wordpress: image: registry.aliyuncs.com/acs-sample/wordpress:yunqi #代表这个服务的镜像 ports: - 80 #代表容器会暴露80端口 volumes: - /acs/log/wordpress/:/var/log/ #这里将容器内的目录/var/log/,映射到宿主机的/acs/log/wordpress/目录。(可供日志服务去采集) labels: #docker的标准能力 容器服务也提供了一些增值的能力(以aliyun开头的标签) aliyun.routing.port_80: wordpress #代表提供了路由能力,前端的域名是wordpress.<cluster_id>.<region_id>.alicontainer.com,并绑定到容器的端口8080 aliyun.probe.url: 'http://container/license.txt' #代表了该镜像起来后的健康型检查URL是容器的内部地址:http://localhost/license.txt aliyun.probe.initial_delay_seconds: '5' #代表了在容器启动后延迟几秒开始健康检查 aliyun.scale: '1' #代表了该镜像需要启动1个容器 aliyun.depends: logtail #代表这个容器会等logtail启动之后再启动 aliyun.latest_image: true #代表会拉取最新的镜像(对于tag不变而内容变化的镜像) restart: always #代表容器挂了会自动重启 links: - mysql #代表wordpress这个服务会连接到mysql,可以通过环境变量mysql.MYSQL_ROOT_PASSWORD获取密码 mysql: image: mysql ports: - 80 labels: aliyun.scale: "1" environment: - MYSQL_ROOT_PASSWORD=password
阿里容器服务-标签
probe
作用:
用于检查服务的健康情况 。
方法:
- 通过URL进行检查,支持http/tcp协议
- 通过shell脚本检查。
rolling_updates
作用:
在更新某个服务时,只要scale标签定义大于1时,以最小化停止服务时间来更新容器。
parallelism
作用:
设置每次并行更新的容器数量。要与上面的参数配合使用。
depends
作用:设置服务的依赖关系。多个依赖使用逗号分隔。
scale
作用:设置容器数量。
routing
作用:设置该服务的域名
格式:
aliyun.routing.port_$container_port: [http://]$domain|$domain_prefix[:$context_path]
- $container_port: 容器端口,注意 该处不是主机的端口
- $domain: 域名,需要用户填写自己的域名
- $domain_prefix: 域名前缀,如果填写域名前缀,容器服务会提供给您一个测试用的域名,域名后缀是wordpress.<cluster_id>.<region_id>.alicontainer.com
- $context_path: 请求的路径,即可以根据请求的路径来选择区分不同的后端容器
例子
web: image: wordpress:4.2 links: - db:mysql labels: aliyun.routing.port_80: wordpress;http://wp.sample.com/context db: image: mysql environment: - MYSQL_ROOT_PASSWORD=password
routing.session_sticky=(true|false)
作用:设置会话保持,即在请求路由时,在一段时间来,会把同一个session指定到同一个后端容器。而不是随机或根据什么算法。
global
作用:设置该服务为全局服务。这种服务器需要部署到每一个节点上,例如一些监控服务。
服务部署约束affinity:service
作用:用来约束服务之间的亲和度,其实说白了多用于把从服务如mysql slave安装在与master不同的节点上。不然,一个节点挂了,从库也会挂掉。
例子参考
master: image: mysql:5.6 environment: - MYSQL_USER=user - MYSQL_PASS=test - REPLICATION_MASTER=true - REPLICATION_USER=repl - REPLICATION_PASS=repl ports: - 3306 slave: image: mysql:5.6 environment: - MYSQL_USER=user - MYSQL_PASS=test - REPLICATION_SLAVE=true - affinity:service!=master ports: - 3306 links: - master:mysql
external
作用:设置该服务直接链接到外部地址。
通过 external,描述一个并没有部署在集群中的 RDS 服务,并提供给部署在集群中的 WordPress 使用。
wordpress: image: wordpress:4.2 ports: - 80 links: - db:mysql environment: - WORDPRESS_DB_USER=cloud - WORDPRESS_DB_PASSWORD=MYPASSWORD - WORDPRESS_DB_NAME=wordpress db: external: host: rdsxxxx.mysql.rds.aliyuncs.com ports: - 3306
变量替换
在模板里可以使用变量。