Docker镜像大小:如何保持小?如何使用更小的镜像?

2021年11月21日03:25:41 发表评论 949 次浏览

介绍

Docker 镜像是用于构建 Docker 容器的基本组件。尽管密切相关,但Docker 镜像和容器之间存在重大差异。

docker 镜像是容器的基础。这些镜像是通过编写 Dockerfiles 来创建的,Dockerfiles是为创建特定的 Docker 镜像而自动执行的指令列表。

Docker如何使用更小的镜像?在构建 Docker 镜像时,你要确保保持轻量级。避免使用大镜像可加快构建和部署容器的速度。因此,将镜像尺寸减小到最小是至关重要的。

继续阅读以了解如何保持 Docker 镜像较小。

使用较小的镜像库(Alpine)

如何保持Docker镜像较小?要创建 Docker 镜像,你需要一个可以根据需要安装和添加组件的基础。你可以下载现有的父镜像并将其用作你自己的镜像的基础或从头开始构建一个。

你安装操作系统的变体作为镜像的基础。操作系统基础可以极大地影响最终 Docker 镜像的大小,这就是为什么选择正确的镜像起着重要作用的原因。

Linux 创建了一个有用的替代方案,它是轻量级的并且具有最小的 POSIX 环境 – Alpine。这个 Linux 发行版镜像库只有 5 MB,围绕musl libcBusyBox构建。

与其他操作系统镜像相比,Alpine 的大小要小得多。下载次数最多的操作系统镜像 Ubuntu 为 188 MB,而 Alpine 仅为 5 MB。

使用 .dockerignore 文件

如何减少Docker镜像大小?排除镜像不需要的某些文件可以帮助你减小镜像大小。这就是.dockerignore文件的用武之地。

构建镜像时,你需要编写一个 Dockerfile,其中包含该镜像的外观规范。

在概述构建上下文时,包含一个 .dockerignore 文件并将其存储在与 Dockerfile 相同的文件夹中也很重要。

此 Docker 功能使用docker run. 系统检查是否存在这样的文件并应用其例外和忽略规则。这样,你就可以从构建的上下文中删除任何不相关的内容。

利用 Docker 中的多阶段构建功能

Docker如何使用更小的镜像?Docker 在其 17.05 版本中引入了多阶段功能。它允许用户将 Dockerfile 分成多个阶段。

每个阶段都以一条FROM指令开始。所需的工件传递到下一阶段,留下你在最终镜像工件中不需要的内容。

由于该过程仅传输工件的必要组件,因此你不必在每条指令后手动清理。

使用多阶段功能,你可以避免添加不必要的图层,这会对整体镜像大小产生相当大的影响。

避免添加不必要的层以减少 Docker 镜像大小

保持Docker镜像较小:Docker 镜像在添加到它的每一层中都会占用更多空间。因此,你拥有的层数越多,镜像所需的空间就越多。

RUNDockerfile 中的每条指令都会为你的镜像添加一个新层。这就是为什么你应该尝试在单个RUN命令中进行文件操作。此外,使用&&选项将不同的命令组合成一条指令。

如何减少Docker镜像大小?例如,你可以在一条RUN指令中更新存储库并安装多个包。要获得清晰、全面的行,请使用反斜杠 ( \ ) 以多行形式输入命令。

除了更新和安装软件包外,你还应该清理 apt 缓存&& rm -rf /var/lib/apt/lists/*以节省更多空间。

RUN apt-get update && apt-get install -y\
         [package-one] \
         [package-two] 
   && rm -rf /var/lib/apt/lists/*

当心更新和不必要的包和依赖项

Docker如何使用更小的镜像?另一种节省空间并保持 Docker 镜像较小的方法是确保你运行的是正在构建的平台的最新版本。

通过拥有最新版本,你可以避免下载无数 rpm 软件包并占用大量空间的大量更新。

注意:如果需要更新,请务必清理rpm缓存并添加dnf clean all选项:RUN dnf -y update && dnf clean all

安装软件包通常还包括下载软件所依赖的依赖项。但是,有时下载也会存储不需要但推荐的包。

此类不需要的软件包会累积并消耗大量磁盘空间。要仅下载主要依赖项,请将--no-install-recommends选项添加到安装命令。

例如:

RUN apt-get install --no-install-recommends [package-one]

额外提示:缓存

保持Docker镜像较小:虽然这个技巧不会影响 Docker 镜像的整体大小,但它确实有助于更快地构建 Docker。

Docker 通过在本地缓存 Dockerfile 的现有层并使用它更快地重建镜像来加速镜像构建。

如何减少Docker镜像大小?例如,假设你有一个由三层组成的简单 Dockerfile。从该文件构建镜像后,系统会自动缓存这三个层。下次构建镜像时,它会从本地缓存加载。

如果你决定修改镜像并更改其中一个图层,则缓存将不会用于修改图层后的任何内容。

我们建议以提高效率和利用缓存功能的方式对指令进行排序。在 Dockerfile 中尽可能低地放置可能更改的指令。

Docker镜像大小:如何保持小?如何使用更小的镜像?
保持Docker镜像较小

结论

Docker如何使用更小的镜像?Docker 容器支持在开发中实现 CI/CD。在监督和使用微服务架构时,镜像大小和构建效率是重要的因素。这就是为什么你应该遵循本文中概述的宝贵建议,尽量保持 Docker 镜像较小。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: