使用 Dockerfile 更换已有镜像的文件(换包)

  其他常见问题
内容纲要

概要描述


本文主要讲述如何通过 Dockerfile 更换已有镜像中的文件,需要一个 Docker 环境,本文是在 TDH5.2.2 集群内执行,已经拥有 Docker 环境。
主要原理是使用 Dockerfile 从 Registory 中构建,并使用 COPY 指令对镜像内某路径下的文件做替换,并构建新的镜像。

详细说明


假设使用外部 /root/opt/test.jar 文件替换 inceptor 镜像中 /usr/lib/inceptor/lib/test.jar 这个文件;
Dockerfile 方式很多情况下会覆盖源文件,再操作之前务必要备份原始镜像,参见详细步骤的第 2 步备份原始镜像;

详细步骤


  1. 找到需要修改的镜像 name 和 tag
  2. 备份原始镜像,
  3. 编写 DockerFile
  4. 构建新的镜像
  5. push 镜像到仓库
  6. 回退
1、找到需要更换的镜像
[root@tdh-01~/opt]# docker images |grep inceptor
tdh-01:5000/transwarp/inceptor             transwarp-5.2.2-final           34a4941969ea        9 minutes ago       3.87 GB
2、备份原始镜像
[root@tdh-01~/opt]# docker tag 34a4941969ea tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final-bak
您在 /var/spool/mail/root 中有邮件
[root@tdh-01~/opt]# docker images |grep inceptor
tdh-01:5000/transwarp/inceptor             transwarp-5.2.2-final           34a4941969ea        13 minutes ago      3.87 GB
tdh-01:5000/transwarp/inceptor             transwarp-5.2.2-final-bak       34a4941969ea        13 minutes ago      3.87 GB
3、编写 Dockerfile
[root@tdh-01~/opt]# vi Dockerfile 
FROM tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final
COPY test.jar /usr/lib/inceptor/lib/

COPY 命令第一个参数是需要更换到镜像内的文件或文件夹,只可以使用相对路径,相对路径指和 Dockerfile 文件的相对路径。
建议是直接将 Dockerfile 和 jar 包放在同一目录下,直接指定 jar 包名;
第二个参数是镜像内的路径。

4、构建新镜像
[root@tdh-01~/opt]# docker build -f Dockerfile -t tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final ./
Sending build context to Docker daemon 3.072 kB
Step 1/2 : FROM tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final
 ---> 34a4941969ea
Step 2/2 : COPY test.jar /usr/lib/inceptor/lib/
 ---> 16518398c108
Removing intermediate container 9bce7f25ee49
Successfully built 16518398c108

可以看到有刚刚构建的镜像,48 seconds ago

[root@tdh-01~/opt]# docker images |grep incep
tdh-01:5000/transwarp/inceptor             transwarp-5.2.2-final           16518398c108        48 seconds ago       3.87 GB
5、push 镜像到仓库
[root@tdh-01~/opt]# docker push tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final
The push refers to a repository [tdh-01:5000/transwarp/inceptor]
44bea1b33574: Preparing 
ad22a4c17e35: Preparing 
7c18ff707cef: Preparing 
......
7c18ff707cef: Layer already exists 
8a81774a2cd1: Layer already exists 
5f70bf18a086: Layer already exists 
f64116beaa4b: Layer already exists 
transwarp-5.2.2-final: digest: sha256:0f2495daa96da4e73486ac49ce2357a40a330f9bd98bb1d93374d3af27bfc80c size: 14744
[root@tdh-01~/opt]# 
6、回退

只需要将备份的镜像 tag 还原成当前版本的 tag;然后重新 push 到镜像仓库即可完成回退;

[root@tdh-01~/opt]# docker tag 34a4941969ea tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final
[root@tdh-01~/opt]# docker push tdh-01:5000/transwarp/inceptor:transwarp-5.2.2-final
The push refers to a repository [tdh-01:5000/transwarp/inceptor]
44bea1b33574: Preparing 
ad22a4c17e35: Preparing 
9e2c8d8701a7: Preparing 
7a7e4c283b3e: Preparing 
......
8a81774a2cd1: Layer already exists 
5f70bf18a086: Layer already exists 
f64116beaa4b: Layer already exists 
transwarp-5.2.2-final: digest: sha256:9988ef0bbf4da4c28ac5eb2b4fc31f0a4b13ace906a2db52bc81e9378dcd3574 size: 14744

这篇文章对您有帮助吗?

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

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

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

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