使用多容器分离应用程序和外部依赖

应用程序除了可执行程序和配置文件之外, 还有一类特殊的依赖,比如 商业软件的License文件, 苹果手机消息推送所需要的证书文件。 这类文件有如下的特性

  1. 不是项目源代码的一部分,不应该和源代码放在一起
  2. 更新周期固定,且比较长,一般是1-3年才需要更新一次。
  3. 文件体积较小。

为什么不能放在源代码中?

以商业软件的Licence文件为例, 当License 到期后, 需要运维到生产环境中使用新的License文件替换旧的文件, 这项变更是一项纯运维工作, 无需开发发布新版本。 如果将License文件放在源代码中,就需要开发发布新版本。

那么如何管理这些配置文件

推荐方法是

  • 使用一个新的镜像,专门存放License文件,
  • 然后将这个镜像以volume 的形式挂载到 原应用程序的容器中。
  • 当License更新时,更新这个镜像即可 .

详细步骤

0. 基本信息

以添加一个 License文件为例,

  1. license 文件名为 mosek.lic
  2. 应用程序名称为 invest-brain

原始docker-compose 文件

  invest-brain:
    image: registry-ci.datayes.com/mom-web/mof-uranus:3.18.3-1306

1. 准备镜像

准备如下文件,Dockerfile , mosek.lic

Dockerfile 的内容为

FROM registry.datayes.com/cache/alpine:latest
MAINTAINER Daniels Cai
ADD mosek.lic /root/mosek/mosek.lic

docker build 之后,我们得到一个 docker镜像, 名称为 registry.datayes.com/base/invest-brain-lic-base:1-249

2. 准备 docker-compose

docker-compose中添加 invest-brain-license , 并设置 volumes, 将 /root/mosek 目录暴露出来

  invest-brain-license:
    image: registry.datayes.com/base/invest-brain-lic-base:1-249
    stdin_open: true
    tty: true
    volumes:
    - /root/mosek/

从invest-brain 中挂在这个容器的 volume

  invest-brain:
    image: registry-ci.datayes.com/mom-web/mof-uranus:3.18.3-1306
    volumes_from:
    - invest-brain-license
    labels:
      io.rancher.sidekicks: invest-brain-license    

修改之后的 docker-compose 文件如下

  invest-brain-license:
    image: registry.datayes.com/base/invest-brain-lic-base:1-249
    stdin_open: true
    tty: true
    volumes:
    - /root/mosek/
  invest-brain:
    image: registry-ci.datayes.com/mom-web/mof-uranus:3.18.3-1306
    volumes_from:
    - invest-brain-license
    labels:
      io.rancher.sidekicks: invest-brain-license

注意, 需要添加 sidekicks 的 label , 来保证 两个容器一定会被调度在同一台主机上

3. 更新生产环境

当License 文件更新时, 我们按照以上步骤重新生成新镜像, 需要做一下两件事

  1. 手动在生产环境中更新该镜像到最新版.
  2. 更新docker-compose 文件, 保证下一次发布新版本时,使用的是最新license文件.
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一 、什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国...
    Blazzer阅读 3,241评论 0 13
  • docker基本概念 1. Image Definition 镜像 Image 就是一堆只读层 read-only...
    慢清尘阅读 9,021评论 1 21
  • Docker — 云时代的程序分发方式 要说最近一年云计算业界有什么大事件?Google Compute Engi...
    ahohoho阅读 15,876评论 15 147
  • 前言: 前段时间,因为劳累过度,感觉身体稍有不适,在本地查体也貌似有不太放心的地方,所以女儿三番两次催促我去香港查...
    珍珠贝阅读 374评论 0 1
  • 《成为作家》的作者葛红兵在书中告诉我,要让你的主人公遇到难题让他痛苦,在他出场时一针见血的告诉你的观众们,他遇到了...
    简儿的十年阅读 430评论 12 11

友情链接更多精彩内容