大家好,我是郑哥。说到轻量级的Docker镜像,很多人都知道Alpine,因为它真的很轻,只有5.57MB。使用它作为基础镜像的Python只有44MB。但它仍然不是最轻量级的。今天我想谈谈谷歌的distrolessbaseimage。distroless镜像gcr.io/distroless/static-debian11只有2MB,是Alpine的一半。你可以在这里找到它https://github.com/GoogleContainerTools/distroless找到它,12.7k星。distroless镜像仅包含应用程序及其运行时依赖项,不包含包管理器、shell以及Linux发行版的任何其他程序。这样做的好处是轻便,推拉都非常快,也比较安全。什么时候应该使用Distroless?现在基本上每个程序员都有自己的持续集成(CI)和持续发布(CD)工作流程。例如,我部署自己的应用程序。为了减少服务器上的配置工作,我把应用放到了Docker上,然后服务器就可以拉取运行了。但有时构建、推送和拉取镜像需要很长时间。为了减少pull,只好将Docker容器映射到服务器的磁盘,然后上传修改后的代码,在Docker容器中安装依赖,活用Docker。变成了虚拟机,等到终于换了服务器,一堆东西又重复了一遍。Distroless图像更轻,这意味着更快的拉和推。Docker提供了一个超级最小的镜像,当您将它用作镜像的基础时,它不会创建额外的层。更少的层等于更快的下载和上传。更快的工作流程意味着更快地向开发人员提供反馈并减少花费的CI时间。安全也是一个重要的问题,如果你不打算使用像sudo、ping、ls这样的工具,它们就不应该在容器中使用,比如你的应用程序是易受攻击的,但是你的应用程序运行的环境没有有ls或sudo的黑客也很难收集信息和执行命令。这是一个实验[1],分别使用常规容器和Distroless部署易受攻击的Flask应用程序。常规容器部署有命令执行:distroless部署没有:原因是distroless没有ls命令:这意味着应该始终避免使用有助于黑客收集更多信息或执行权限升级的工具。因此,如果你注重镜像的推拉速度和容器的安全性,或者在生产环境中使用,可以使用distroless。什么时候不应该使用Distroless?如果你想在容器中调试你的程序,你需要一个shell和一些其他安装的工具,但distroless没有这些,所以使用普通镜像进行开发。Python应用程序Dockerfile的distroless示例:FROMpython:3-slimASbuild-envCOPY./appWORKDIR/appFROMgcr.io/distroless/python3COPY--from=build-env/app/appWORKDIR/appCMD["hello.py","/etc"]最后,distroless需要开发者付出更多的努力,但只要你的app拉多了,节省的时间和带来的安全都是值得的。让我们关注一下Distroless。如果觉得有帮助,请点赞、转发、收看,感谢您的支持。
