我已经在本地创建了一个图像,它包含两层
$ docker images inspect existingimagename
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:e21695bdc8e8432b1a119d610d5f8497e2509a7d040ad778b684bbccd067099f",
"sha256:3ff73e68714cf1e9ba79b30389f4085b6e31b7a497f986c7d758be51595364de"
]
},
现在,我正在构建另一个图像,并希望节省空间。上一个映像的第一层是主文件系统。所以我决定使用它
FROM sha256:e21695bdc8e8432b1a119d610d5f8497e2509a7d040ad778b684bbccd067099f
ENV LANG=en_US.UTF-8
CMD ["/usr/bin/bash"]
然后我尝试构建新图像
$ docker build -t newimage -f Dockerfile .
Sending build context to Docker daemon 443.5MB
Step 1/3 : FROM sha256:e21695bdc8e8432b1a119d610d5f8497e2509a7d040ad778b684bbccd067099f
pull access denied for sha256, repository does not exist or may require 'docker login'
出现错误。
那么如何处理。
答案 0 :(得分:1)
从图像层缓存中获利的一种简单方法是仅在第一层创建基本图像。
然后在其他Dockerfile中使用FROM <base image>
。
这样,将节省磁盘空间,因为多个映像将共享同一层,并且构建速度也会更快。
Dockerfile-base:
FROM scratch
ADD ./system.tar.gz /
docker build -f Dockerfile-base -t base .
Dockerfile-1:
FROM base
COPY ./somefiles /
docker build -f Dockerfile-1 -t image1 .
Dockerfile-2:
FROM base
COPY ./otherfiles /
docker build -f Dockerfile-2 -t image2 .
Best practices for writing Dockerfiles § Leverage build cache