DockerCompose笔记
背景
看了docker大概教程之后.会有感觉,就这?
和实际开发中使用感觉相去甚远.
遂看相关的docker compose.
介绍
Docker-Compose是Docker官方的开源项目,
负责对Docker容器集群的快速编排.
(本质上是把需要在命令行中执行的多条命令放在一个文件中,
甚至低级一些,写一个脚本,定义好各种函数和操作也可以实现同样效果)
而docker-compose则使用了特别的yaml语法,(配置文件名为docker-compose.yml)
相比shell脚本
- 更加容易理解
- 可以省去许多重复的代码
- 方便管理依赖关系(决定谁先启动谁后启动)
只不过似乎yaml的标准一直没有明确标准,语法版本也在一升再升(版本一览).
使用GUI方式来完成规则控制也可以,只不过GUI和版本管理的天然冲突谁来解决呢.
容器管理的层次
为了方便管理,抽象出了不同的层次
- project
- service
- container
project
运行目录下的所有文件
- docker-compose.yaml,
- extends文件
- 环境变量文件等
组成一个工程
service
一个工程中可包含多个服务
一个服务中定义了要运行的容器的镜像,参数,依赖
使用举例
比如要使用WordPress和MySQL这两个docker来启动一个静态网页服务,
使用命令行的方式:
1 | docker container run \ |
等效的配置文件
1 | services: |
使用
1 | docker-compose up -d # 创建并启动这些containers,-d与docker run的-d相同含义 |
其他配置和说明
样例如下
1 | # yaml 配置实例 |
接下来主要写一些与build同级的配置项
build
除了指定一个 .
, build还可以继续补充说明
1 | build: |
command
用来覆盖容器启动的默认命令
container~name~
指定启动后容器的名称
depends~on~
用于指定依赖关系,
被依赖的,更底层一些的项目会
- 先启动
- 最后停止
1 | version: "3.7" |
比如这里的web服务,依赖db和redis,就要求db和redis首先启动.
expose
暴露端口,但不被宿主机访问,只供被连接的服务访问
env~file~
用于指定环境变量文件,可以是一个,可以是多个
logging
日志记录配置
1 | logging: |
restart
重启策略,如果遇错或其他原因关闭了,是否需要重启
- no 不要重启
- always 总要重启
- on-failure 非正常退出时重启
- unless-stopped 如果手动关闭就不重启,其他情况重启
TODO secrets
存储敏感数据
1 | version: "3.1" |
TODO 部署相关
deploy与build同级,但设置项比较多.
1 | version: "3.7" |
TODO mode
服务提供的模式,可选
- replicated 复制
- global 全局
?
replicas
mode为replicated时,指定节点数量
endpoint~mode~
访问集群服务的方式
- vip,集群对外有个虚拟的ip,所有的请求通过虚拟的ip到达集群
- dnsrr,轮询,请求会轮询集群的ip列表
labels
为服务设置标签,
怎么用?
resources
配置资源限制,reservations表示预留,或者说最低?limits表示最大使用
可以配置cpus(没有用百分制单位),和memory
restart~policy~
下属还有具体配置
-
condition
- none
- on-failure
- any(默认值)
-
delay
默认值0,立即重启
-
max~attempts~
默认一直重试
-
window
重启超时时间,默认0
rollback~config~
更新失败后如何回滚服务
-
parallelism
一次回滚的容器数,如果为0表示全部.
-
delay
容器组回滚之间的等待时间,默认0s
-
failure~action~
回滚失败策略
- continue 假装没有发生
- pause 停下(默认值)
-
monitor
更新后观察是否成功的观察期,默认0s
-
max~failureratio~
回滚期间容忍的故障率,默认为0
-
order
回滚顺序策略
- stop-first 串行回滚(默认值)
- start-first 并行回滚
update~config~
如何更新服务
-
parallelism
一次更新的容器数,设置为0表示全部,设置为10表示每次10个直到完成
-
delay
-
failure~action~
-
monitor
-
max~failureratio~
-
order
其他
devices
dns
dns~search~
extra~hosts~
entrypoint
healthcheck
network~mode~
security~opt~
stop~graceperiod~
stop~signal~
sysctls
tmpfs
ulimits
感受
没有使用过集群做过实际操作,要理解真的比较难