内容纲要
概要描述
本文主要讲述如何通过 Dockerfile 更换已有镜像中的文件,需要一个 Docker 环境,本文是在 TDH5.2.2 集群内执行,已经拥有 Docker 环境。
主要原理是使用 Dockerfile 从 Registory 中构建,并使用 COPY 指令对镜像内某路径下的文件做替换,并构建新的镜像。
详细说明
假设使用外部 /root/opt/test.jar
文件替换 inceptor 镜像中 /usr/lib/inceptor/lib/test.jar
这个文件;
Dockerfile 方式很多情况下会覆盖源文件,再操作之前务必要备份原始镜像,参见详细步骤的第 2 步备份原始镜像;
详细步骤
- 找到需要修改的镜像 name 和 tag
- 备份原始镜像,
- 编写 DockerFile
- 构建新的镜像
- push 镜像到仓库
- 回退
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