背景:
构建一个build env的docker image,由于一些命令上的错误导致重复中断了许多次,而我每次都从头开始构建镜像,非常浪费时间。
偶然间调用docker images发现了如下信息:
user@user:~$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE<none> <none> 07e7320fbda9 16 minutes ago 2.27GB<none> <none> 2d517689d4bc 5 hours ago 1.68GB
出现了几个未命名的镜像。
这个是不是我之前构建时产生的缓存?或者说中间产品:即不是我完整期望的镜像,但是已经安装了一部分内容?
搜索相关资料之后确实如此,因此我们应该可以基于这些未命名的镜像继续进行构建。
参考资料:https://tuxknight-notes.readthedocs.io/en/latest/docker/dockerfile_best_practices_take.html
方法:
想引用这些上一次构建镜像“缓存”时,使用下述指令:
docker build --cache-from "ImageID" "DockerfileRoute"
即 “—cache-from ImageID”将目前本地存在的上一次image build的缓存调用出来继续构建。
Notice:
这种情况下,是引用这个镜像继续构建,最终会把这个引用的缓存镜像覆盖掉,生成新的镜像。
背景2:
如果我只是想引用某个存在的镜像,去构建一个新的镜像而且不覆盖原引用镜像呢?
方法:
更改Dockerfile的第一行,
比如引用的Docker镜像中的一行:
FROM ubuntu:20.04 as baseenvSHELL [ "/bin/bash", "-o", "pipefail", "-o", "xtrace", "-c"]
我们把第一行更改为:
FROM “你需要引用的Image ID”
然后重新docker build这个Dockerfile即可。
