减少 Docker 镜像大小
本文将介绍减少 Docker 镜像大小的基础知识。
先决条件✅
- 了解Docker:这里
- 现有镜像或需要 Docker 镜像的应用程序。
🤔 理解问题
在微服务的世界里,大多数生产都依赖于容器。镜像就像在容器中播放某首歌曲(应用程序)的 CD/U盘。Docker
镜像旨在让不同平台和环境的开发人员实现统一。但以内存和速度为代价来获得这一点是不可接受的。
- 较大的图像需要花费一些时间来提取。
- 增加了使用它来启动容器的时间。
- 它增加了所使用的图像注册表的负载。
- 随着升级,漏洞检查会变得越来越困难
我在我的宠物项目Kube-ez中遇到了同样的问题。问题在于缩小 Docker 镜像:这里。这是我在 2023 年解决的第一个问题。镜像大小减少了97%。镜像大小从约 500 MB缩小到了16 MB。
🤷🏻♂️为什么要解决这个问题?
那么,如果 Docker 镜像有 6 GB(呃,Oracle 😑),它还能运行吗?别动它。
好吧,我不同意!这是我在 Juspay(印度金融科技初创公司)担任站点可靠性工程师的经验。当有服务在生产环境中运行时,保持其正常运行始终是大多数人面临的挑战。但我们一致认为,没有一家公司的SLO是 100%。每一秒的停机时间都至关重要!
服务总有一天会崩溃或遇到任何错误。在最好的情况下,你总有一天会更新它。到那时,你需要启动一个新的容器或更新后的容器,到那时它就会派上用场了!
更轻量的 Docker 镜像可以确保容器更快启动,从而为您的公司节省宝贵的时间!
而且,它更容易调试、保护和存储 :)
🐋 如何减少 Docker 镜像大小?
嗯,我发现了三种方法,并将与大家分享。
1. Docker Slim✨
Docker Slim是解决这个问题最好、最简单的工具。
感谢我的朋友Mritunjay向我介绍了这个工具。
- 轻松减少 Docker 镜像的大小。
- 连接到 DockerHub 并为您提供一个更简单的平台来处理注册表上的图像。
- 它还会检查并修复漏洞🤯
- 安装和使用也非常简单!
如果你希望精简本地 Docker 镜像的大小,可以尝试 RedHat 开发者小组的这篇文章:这里。
不过,我还是希望以后能看到 apk 和其他软件包的安装方法。
我使用该工具对同一个 Docker 镜像得到的结果
2. 手动方法💪
现在,这需要你对你的项目有充分的了解。这其中还有另外两个步骤。如果第一步已经满足你的需求,你可以在第一步之后停止。让我们开始深入研究吧!
2.1 使用更轻量的基础镜像
这是最简单也是最常用的方法。使用一个更轻量级的镜像作为容器的基础层。你可以选择与你正在使用的操作系统或语言对应的 Alpine 镜像。
Alpine 镜像:包含基本准系统操作系统的镜像。缺少必要的软件和驱动程序,例如显卡、WiFi 等等。
2.2 多阶段构建
我们的想法是在镜像中使用两个不同的阶段。一个阶段是构建二进制文件,另一个阶段是直接使用它!
说起来容易做起来难😅
就我而言,我采用了多阶段构建模式。在构建阶段生成了一个二进制文件,并用它运行容器。
现在镜像大小约为 35 MB。进一步减小了二进制文件的大小,最终大小约为 16 MB。
此后,还有许多建议需要采纳。但我还没有实施。
- 包含一个 .dockerignore 文件。
- 减少不必要的依赖。
- 缓存层以供重用
3. Docker 初始化
[2023年10月20日更新]
Docker 刚刚发布了一项名为docker init的功能,可以自动化整个过程。它不仅能够处理镜像大小,还遵循了创建 Docker 镜像的最佳实践。我仍在尝试在不同项目中使用它。初步测试似乎效果不错。
了解有关 Docker Init 的更多信息:这里
一旦找到更多方法,我将继续添加。
如果您喜欢此内容,可以关注我或在 Twitter 上关注kitarp29以了解更多信息!
感谢您阅读我的文章:)
文章来源:https://dev.to/kitarp29/reducing-docker-image-size-a67