【问题标题】:How can i remove layers from my docker image?如何从我的 docker 镜像中删除图层?
【发布时间】:2023-03-07 20:45:01
【问题描述】:

我通过增量提交构建了一个 docker 镜像。这导致在我的 docker 镜像中创建了很多层,随后镜像的大小变得非常大。

有没有办法去除图层并因此减小图像的大小?

任何帮助将不胜感激。

【问题讨论】:

  • 您会发现使用 Dockerfile 而不是增量提交构建的过程更加高效、可重复和可控。

标签: docker boot2docker


【解决方案1】:

您可以尝试导出图像,然后再次导入。这样一来,所有图层都会丢失,并且您的图像尺寸会更小。

sudo docker export red_panda > exampleimage.tar
cat exampleimage.tar | sudo docker import - exampleimagelocal:new

请注意,这仅适用于容器,因此您需要从映像启动一个,然后执行此操作。

希望对你有帮助。

【讨论】:

  • 我导出了图像,然后在另一台机器上导入了它。我无法在那台机器上运行该图像。它说“无法在本地找到图像”。可能是什么问题?
  • 嗨,你是用哪个命令导入的?您是否为导入和运行命令使用了相同的图像名称?如果您执行docker images,图像会在那里列出吗?
  • 能否执行docker images查看导入的图片是否列出?
  • 我有一条消息:docker:来自守护进程的错误响应:为 xxxreduce 拒绝拉取访问,存储库不存在或可能需要“docker login”。
【解决方案2】:

你可以用下一个技巧挤压层

FROM oracle AS needs-squashing
ENV NEEDED_VAR some_value
COPY ./giant.zip ./somewhere/giant.zip
RUN echo "install giant in zip"
RUN rm ./somewhere/giant.zip

FROM scratch
COPY --from=needs-squashing / /
ENV NEEDED_VAR some_value

【讨论】:

  • 这种方法存在一个问题 - 如果您有来自上一层容器的环境变量需要它工作,并且您使用FROM scratch 方法,正如您在此处介绍的那样,变量不会保留 - 例如,您可能会因此而丢失 $JAVA_HOME - 所以请小心使用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-26
  • 1970-01-01
  • 2014-02-19
  • 2020-03-23
  • 1970-01-01
  • 2022-11-11
  • 2019-06-22
相关资源
最近更新 更多