实现更快构建和更小镜像的 5 个 Docker 最佳实践

通过应用一些智能 Docker 实践,您可以构建更快的映像,并保持它们干净、紧凑且可用于生产。

来源:KDnuggets

简介

您已经编写了 Dockerfile,构建了镜像,一切正常。但随后您会注意到该映像超过了 1 GB,即使是最小的更改,重建也需要几分钟,而且每次推或拉都感觉非常缓慢。

这并不罕见。如果您在编写 Dockerfile 时不考虑基本映像选择、构建上下文和缓存,这些是默认结果。您不需要彻底检修来修复它。一些有针对性的更改可以将图像缩小 60 - 80%,并将大多数重建时间从几分钟缩短为几秒钟。

在本文中,我们将介绍五种实用技术,以便您可以了解如何使 Docker 镜像更小、更快、更高效。

先决条件

要继续操作,您需要:

  • Docker 安装
  • 基本熟悉 Dockerfile 和 docker 构建命令
  • 带有requirements.txt 文件的Python 项目(示例使用Python,但原则适用于任何语言)
  • 选择 Slim 或 Alpine 基础图像

    每个 Dockerfile 都以一条 FROM 指令开始,该指令选择一个基础镜像。该基本图像是您的应用程序赖以生存的基础,在您添加一行自己的代码之前,其大小将成为您的最小图像大小。

    例如,官方 python:3.11 映像是一个完整的基于 Debian 的映像,加载了大多数应用程序从不使用的编译器、实用程序和软件包。

    # 完整图像 — 包含所有内容

    来自Python:3.11

    
                                        
    
                                            

    # Slim 镜像 — 最小的 Debian 基础

  • 来自 python:3.11-slim
  • # Alpine 镜像 — 更小、基于 musl 的 Linux

    来自 python:3.11-alpine现在为每个图像构建一个图像并检查尺寸:docker 镜像 | grep python仅更改 Dockerfile 中的一行,您就会看到数百兆字节的差异。那么你应该使用哪个?slim 是更安全的默认值。它去掉了不必要的工具,但保留了许多 Python 包正确安装所需的 C 库。对层进行排序以最大化缓存问题是:如果一个层发生变化,则该层之后的每一层都会失效并从头开始重建。摘要