Docker换包最佳实践

  原理
内容纲要

概要描述

为什么要有规范的换包流程
1、 规范的换包流程方便记录历史换包信息
2、 规范的换包流程方便控制镜像layer

详细描述

规范换包流程说明
1、 找到需要换包的基础镜像(历史上备份的基础镜像)
2、 单独创建目录用来存放Dockerfile和替换的jar包
3、 编写dockerfile,大部分来说,通过FROM,RUN,ADD可以完成换包过程,对每次的过程添加注释来说明换包时间,内容和目的
4、 每次换包时,关注历史换包记录,对同一jar包进行的替换可以对历史记录进行备注,减少命令产生的layer层数
5、 在dockerfile目录下执行docker build -t : .
6、 docker push : 上传镜像到仓库替换旧版本镜像

规范换包常用命令

1、 RUN
执行一行命令,多数用来删除需要替换掉的包,一次RUN命令会生成一次layer,尽量控制RUN命令执行次数,可以通过

RUN  \
        && 

来执行多个命令

2、 ADD
将构建镜像的本地文件放入镜像中,如果是tar文件会自动解压,一次ADD命令会生成一次layer,尽量控制ADD命令执行次数,可以通过

■ ADD src1 src2 dst

将多个文件从源端放到同一个目录下

如果是直接替换同名文件,不需要RUN rm,一行ADD命令即可

规范换包示例(以下dockerfile示例内容可以进一步优化)

argodb-inceptor:argodb-2.1.2-final-ori之前的dockerfile记录换过jar包inceptor-batch-operator-poc-6-donghua.jar,现在需要更换新的jar包windrunner-core-poc-6-donghua.jar
1、 确定需要换包的基础镜像 argodb-inceptor:argodb-2.1.2-final-ori-base
如果是标准tag(XXX-final)建议重新tag或者使用imageid
2、 上次换包时存在目录argodbinceptor/patch0318,继续创建如下目录 argodbinceptor/patch0511/
3、 将需要替换的jar包放到 argodbinceptolr/patch0511/ 目录下,在argodbinceptor目录更改上次填写的dockerfile,注释掉第一次更新信息,并将对应内容放到第二次更新中合并,如果需要回滚,则可以注释掉最后的命令,恢复回滚到想要更改的命令即可。
dockerfile内容:

FROM tdh02:5000/transwarp/argodb-inceptor:argodb-2.1.2-final-ori-base
# image id:4ad922bf1ef7        3 weeks ago         3.99GB
# image出自branch xxx

# 更新时间 2021-03-18
MAINTAINER jiabao.wu "jiabao.wu@transwarp.io"

# 以下为替换的jar包,重复替换的jar包目前只保留一条信息
# 研发:XXX
# 更新时间 2021-03-xx 随测试环境image提供到现场 inceptor-batch-operator-poc-6-donghua.jar
# RUN rm -f /usr/lib/inceptor/lib/inceptor-batch-operator-poc-6-donghua.jar
# ADD ./patch0318/inceptor-batch-operator-poc-6-donghua.jar /usr/lib/inceptor/lib

# 研发:XXX
# 更新时间 2021-05-11 数据查询优化的包 windrunner-core-poc-6-donghua.jar ,ADD命令覆盖同名文件
# RUN rm -f /usr/lib/inceptor/lib/windrunner-core-poc-6-donghua.jar \
&& rm -f /usr/lib/inceptor/lib/inceptor-batch-operator-poc-6-donghua.jar
ADD ./patch0318/windrunner-core-poc-6-donghua.jar ./patch0511/inceptor-batch-operator-poc-6-donghua.jar /usr/lib/inceptor/lib

( push 之前基本 bak 之前的镜像 4步骤的 . 在末尾)
4、 在argodbinceptor目录执行命令 docker build -t tdh02:5000/transwarp/argodb-inceptor:argodb-2.1.2-final-ori -f dockerfile .
5、 上传镜像docker push tdh02:5000/transwarp/argodb-inceptor:argodb-2.1.2-final-ori
ps: 有的传包软件传到服务器后 文件 的权限很低。可能 pod 内root 用户都读不到。
需要人为 加上  chmod 777

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。