当前位置:  开发笔记 > 编程语言 > 正文

Docker构建后虚拟模型缩小

如何解决《Docker构建后虚拟模型缩小》经验,为你挑选了2个好方法。

使用多阶段构建,我想在Dockerfile的末尾缩小映像的大小,如下所示:

FROM ubuntu AS ubuntu_build

RUN # do a lot of build things

FROM alpine

COPY --from=ubuntu_build /app /app

ENTRYPOINT whatever

高山图片很小,理论上只有/ app东西会从ubuntu图片中复制出来,这是书中最好的技巧,还是有其他方法来减小最终图片的大小?



1> John Kugelma..:

一发不可收拾

Google提供了说明和工具来帮助制作清晰的图像。

“无发行版”映像仅包含您的应用程序及其运行时依赖项。它们不包含程序包管理器,shell或您期望在标准Linux发行版中找到的任何其他程序。

为什么要使用平稳的图像?

将运行时容器中的内容严格限制为应用程序所需的内容是Google和其他在生产中使用了多年容器的技术巨头采用的最佳实践。它改善了扫描仪的信噪比(例如CVE),并减轻了根据您的需要建立来源的负担。

如果您的应用程序是已编译的二进制文件,那么您可以摆脱一个二进制文件及其链接到的共享库的困扰。如果限制了要链接的库,则可能只需要几个。例如,这是在我的机器上针对使用gcc编译的最小C程序的链接:

$ ldd basic-program
        linux-vdso.so.1 (0x00007fffd3fa2000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2e4611b000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2e4670e000)

哎呀,您甚至可以静态链接整个程序,而完全没有依赖项。

Google提供了一组针对不同语言的基础图像:

gcr.io/distroless/static(Go,Rust,D)

gcr.io/distroless/base(C,C ++)

gcr.io/distroless/java(Java)

gcr.io/distroless/cc(Rust,D)

它们只包含一些基本文件,远远少于像alpine这样的最小发行版,因为它仍然具有apk程序包管理器,用户空间实用程序等。使用它们的方式与您在问题中的描述相同:最后一步在多阶段构建中。

FROM gcr.io/distroless/base
COPY --from=build /go/bin/app /
CMD ["/app"]

从头开始

您还可以走完整的原始森林生活路线,建立最终形象FROM scratch。没有比这更纯净的了。绝对没有您没有放在那里的东西。例如,这是traefik选择的路线。

FROM scratch
COPY certs/ca-certificates.crt /etc/ssl/certs/
COPY traefik /
EXPOSE 80
VOLUME ["/tmp"]
ENTRYPOINT ["/traefik"]



2> atline..:

除了use之外multi-stage,另一种典型的方法是使用docker-slim来减小最终构建图像的大小,如下所示:

docker-slim build --http-probe your-name/your-app

细节参考本指南

如果需要,请添加其他内容摘自“五种精简Docker映像的方法”:

仔细考虑您的应用程序的需求

只需在dockerfile中安装您真正需要的内容即可。

使用小型基本图片

可以使用Alpine Linux甚至直接使用Alpine Linux,了解如何创建最小的docker-container

尽可能少使用层

结合在一起运行,更多运行更多层,更多层更大

使用.dockerignore文件

这样可以避免在使用时将所有内容复制到图像上COPY . /,如果不使用.gitignore,则更多,如果您不使用,则需要避免使用COPY . /可能将某些必要的内容复制到图像上。

压榨Docker映像

这里的想法是,在创建映像后,然后使用诸如docker-squash之类的工具将其尽可能地展平。

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有