应用程序除了可执行程序和配置文件之外, 还有一类特殊的依赖,比如 商业软件的License文件, 苹果手机消息推送所需要的证书文件。 这类文件有如下的特性
- 不是项目源代码的一部分,不应该和源代码放在一起
- 更新周期固定,且比较长,一般是1-3年才需要更新一次。
- 文件体积较小。
为什么不能放在源代码中?
以商业软件的Licence文件为例, 当License 到期后, 需要运维到生产环境中使用新的License文件替换旧的文件, 这项变更是一项纯运维工作, 无需开发发布新版本。 如果将License文件放在源代码中,就需要开发发布新版本。
那么如何管理这些配置文件
推荐方法是
- 使用一个新的镜像,专门存放License文件,
- 然后将这个镜像以volume 的形式挂载到 原应用程序的容器中。
- 当License更新时,更新这个镜像即可 .
详细步骤
0. 基本信息
以添加一个 License文件为例,
- license 文件名为 mosek.lic
- 应用程序名称为 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 文件更新时, 我们按照以上步骤重新生成新镜像, 需要做一下两件事
- 手动在生产环境中更新该镜像到最新版.
- 更新docker-compose 文件, 保证下一次发布新版本时,使用的是最新license文件.
网友评论