Docker-我是否也应该保存基本映像,以用于缓存?
这是我的Docker-我是否也应该保存基本映像,以用于缓存?,docker,docker-build,Docker,Docker Build,这是我的Dockerfile: FROM alpine:latest as builder RUN touch /builder FROM alpine:latest as app RUN touch /app CMD ["bash"] 第一次构建拉取alpine并构建builder: $ docker build -t builder --cache-from builder --target builder . Sending build context to Docker daemon
Dockerfile
:
FROM alpine:latest as builder
RUN touch /builder
FROM alpine:latest as app
RUN touch /app
CMD ["bash"]
第一次构建拉取alpine
并构建builder
:
$ docker build -t builder --cache-from builder --target builder .
Sending build context to Docker daemon 14.85kB
Step 1/2 : FROM alpine:latest as builder
latest: Pulling from library/alpine
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for alpine:latest
---> 961769676411
Step 2/2 : RUN touch /builder
---> Running in d142125feb20
Removing intermediate container d142125feb20
---> 1adad9638a6c
Successfully built 1adad9638a6c
Successfully tagged builder:latest
第二次构建使用拉式alpine
,构建builder
和构建app
:
$ docker build -t app --cache-from builder --cache-from app --target app .
Sending build context to Docker daemon 14.85kB
Step 1/5 : FROM alpine:latest as builder
---> 961769676411
Step 2/5 : RUN touch /builder
---> Using cache
---> 1adad9638a6c
Step 3/5 : FROM alpine:latest as app
---> 961769676411
Step 4/5 : RUN touch /app
---> Running in 702ee875f781
Removing intermediate container 702ee875f781
---> d2b010f12ee8
Step 5/5 : CMD ["bash"]
---> Running in 6c7a6354b8bf
Removing intermediate container 6c7a6354b8bf
---> e375b0b7905e
Successfully built e375b0b7905e
Successfully tagged app:latest
现在,我在本地删除了alpine
:
$ docker image rm alpine
Untagged: alpine:latest
Untagged: alpine@sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
我的期望是:使用--从缓存构建就足够了。
但是,阿尔卑斯山又被拉了回来。如果它被更改,它将使我的缓存无效
$ docker build -t app --cache-from builder --cache-from app --target app .
Sending build context to Docker daemon 14.85kB
Step 1/5 : FROM alpine:latest as builder
latest: Pulling from library/alpine
Digest: sha256:72c42ed48c3a2db31b7dafe17d275b634664a708d901ec9fd57b1529280f01fb
Status: Downloaded newer image for alpine:latest
---> 961769676411
Step 2/5 : RUN touch /builder
---> Using cache
---> 1adad9638a6c
Step 3/5 : FROM alpine:latest as app
---> 961769676411
Step 4/5 : RUN touch /app
---> Using cache
---> d2b010f12ee8
Step 5/5 : CMD ["bash"]
---> Using cache
---> e375b0b7905e
Successfully built e375b0b7905e
Successfully tagged app:latest
问题:
builder
作为基本映像,这样当使用两个缓存构建app
时(一个用于builder
,一个用于app
),就足够了,正如我所期望的那样?因此,如果不存在alpine
,就不需要pull
1.
),以下选项是否更好?不要使用来自alpine:latest的,而是使用来自alpine:3.10的?或3.10.2
?我希望在从不同的机器构建时确保缓存。我不知道哪个标签是“可靠的”,所以它不会改变:也就是说,当他们按下3.10
时,他们会更新3
,因为3.10
是3
的一部分。意思是3.10.2
不会改变吗?除非出现3.10.2.2
:/
ubuntu:18.04
作为基本图像,目前我没有找到类似ubuntu:18.04.3
或类似的东西。因此,没有更具体的图像可以传递myalpine
。那么我的构建将是:
$ docker build -t app --cache-from myalpine --cache-from builder --cache-from app --target app .
谢谢