美文网首页
使用多容器分离应用程序和外部依赖

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

作者: Daniels_Cai | 来源:发表于2018-01-15 16:28 被阅读24次

    应用程序除了可执行程序和配置文件之外, 还有一类特殊的依赖,比如 商业软件的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文件.

    相关文章

      网友评论

          本文标题:使用多容器分离应用程序和外部依赖

          本文链接:https://www.haomeiwen.com/subject/curdoxtx.html