昨天 Golang 的中国官网上线了哦:https://golang.google.cn/
完整生命周期
通过学习 Swarm 的 Stack 和 Secret 等概念,能够帮助我们更好地部署应用,那实际上部署一个真实的应用,应该怎么做?
可以使用一套 Compose YAML 文件来完成开发、构建和部署,满足:
还是用之前做过的 Drupal 应用来演示这个过程,相应代码在 GitHub。其中, 会自动被 文件覆盖,对于其它环境,可以通过 参数指定 YAML 覆盖。
本地开发: 。
CI: 。
对于生产环境,我们需要做一些处理。
执行 可以通过标准输出流生成一个新的 YAML 文件,然后新建或更新 Stacks。警告: 使用此种方式会导致输出的 output.yml 文件中丢失 声明字段。而且要注意,Compose 中的 在 Stack 中尚未支持。所以我们目前可能还得针对生产环境配置单独的 YAML。
Service 更新
Swarm 的更新功能主要是控制服务中容器实例的滚动更新(one by one)来替换运行的容器,同时需要限制宕机时间。
防止宕机并不是调度器应该关心的,而是需要测试来关注新变更的逻辑和数据库操作会不会影响到用户和业务,test early and test often
Swarm 中有非常多的 CLI 选项(70+)来控制更新,其中大多数是创建选项,所以需要显示地加上 和 。命令还包括回滚和健康检查选项,以及伸缩回滚子命令:
常见的更新命令
更新镜像至某个版本:
添加环境变量并移除某个端口(端口不能更改,只能增加和移除):
变更多个服务的复制数量:
通过 Stack 文件更新 Swarm
只需编辑 YAML 文件,然后执行 。
如果遇到 task 节点分配不均匀需要 rebalancing ,可以执行:
健康检查(Healthcheck)
1.12 版本中新增的特性,支持在 Dockerfile、Compose YML、docker run 和 Swarm Service 中使用。强烈建议在生产环境中使用此选项。
Docker Engine 将会在容器内 这个命令,比如 。
预期结果 OK, Error。
只有三种状态: , , 。
默认每30秒会执行一次执行。
只是检测容器是否在运行的基本方式,并不能代替第三方监控。
健康检查状态展示在 。
查看上5次健康检查状态: 。
docker run 不会对健康检查的结果做反馈,而 Service 中的调度器会替换状态为 的容器。
docker run 的例子:
这里 命令用管道操作符确保执行失败时返回错误码 1。
可以用于启动特别慢的应用,比如 JAVA,在设定好的一段时间后才会开始首次健康检查。
Dockerfile 中的健康检查配置项:
基础配置:
配合 CMD:
postgres 数据库检查可以使用它的工具:
Compose/Stack 文件中可以这样配置:
领取专属 10元无门槛券
私享最新 技术干货