利用分层机制优化 Docker Image

文章转载自:https://mp.weixin.qq.com/s/FrIOIquHVsCTEMfHiF87MA

假设系统中我们有两个应用 App1 和 App2。这两个节点的环境信息如下:

通过上表环境信息的对比,我们发现在这两个不同引用的节点上,不同的部分只是 最后的代码code 的和config 文件。对于其他相同的部分,我们可以考虑通过 Docker Image Layer 的概念将其复用。从而最大限度发挥 Docker 的能力。将上表中的两部分环境信息以分类为节点名,重新以树状结构组织如下图所示。

建议将一些不会经常发生变化的命令或者同类型的命令,合并到同一层。如下图所示:

最后将图中的两个树状结构图进行叠加将重复的节点进行合并,最后得出如下树状结构图:

现在我们已经基于 Docker Image 的分层存储机制完成了一个初步的Docker Image 的规划。接下来就可以根据上图结构分别制作 Image。最终我们将会有三个 Base Image,和最终加入代码的业务镜像。同时基于此,我们的Dockerfile也类比如下:这里本该是 4个 gitlab 仓库制作的 4个镜像。为了方便展示镜像复用关系, 用一个代码块展示

# f1: 运维安全团队增加优化基础安全组件
FROM python3
RUN apt install -y some-security-framework
# push: abc.hub.com/libary/python3 

# f2: 架构师安装基础架构
FROM abc.hub.com/libary/python3
RUN wget -c anaconda12.sh && ./anaconda12.sh && rm -f anaconda12.sh
# push: abc.hub.com/ai-tools/env-anaconda:12

# f3: 制作模型镜像
FROM abc.hub.com/ai-tools/env-anaconda:12
RUN pip install -y some-dependences
RUN wget -c s3.xx.com/some-path/dust.model -O /some/path
# push: abc.hub.com/ai-tools/env-anaconda-dust:runtime

# f4: 制作业务镜像
FROM abc.hub.com/rk-ai-tools/env-anaconda-dust:runtime
ADD code /workspace/code
ENTRYPOINT [ "/bin/bash", "/entrypoint.sh" ]
# push: abc.hub.com/rk-ai-pollution/srv-some-appname-amd64:1.0.0-1234567

posted @ 2022-05-27 10:08  哈喽哈喽111111  阅读(66)  评论(0编辑  收藏  举报