当前位置:数据分析 > 减少 Docker 镜像大小的 10 个优化技巧

减少 Docker 镜像大小的 10 个优化技巧

  • 发布:2023-10-07 21:38

在本文中,我们将了解减小 Docker 图像大小的方法。

什么是docker?

Docker是一个容器引擎,可以在容器内运行一段代码。 Docker 镜像是一种在任何地方运行应用程序而无需担心应用程序依赖性的方法。

为了构建镜像,docker 使用一个名为 Dockerfile 的文件。 Dockerfile 是一个包含许多指令的文件(RUNCOPYEXPOSE 等)。成功执行这些命令后,docker会创建一个镜像供我们在任何地方使用。

为什么要减小docker镜像的大小?

  • 安装不必要的软件包会增加攻击面,从而增加安全风险。
  • 图像传输需要更多时间。
  • 大镜像的部署需要更多时间。

我们必须以某种方式创建 Dockerfile,以便从该 Dockerfile 构建的映像在大小方面得到优化。

在本文中,我们将讨论 10 种减少 docker 镜像大小的有效方法。

1。最小化镜面层

我们可以减少 Dockerfile 的层数。

dockerfile 中的每个 FROM、RUN、COPY 命令都会创建一个单独的层,并增加映像的整体大小和构建时间。

要减小 docker 映像大小,请在单个 RUN 或 COPY 指令中执行多个命令,以最大限度地减少 Dockerfile 中的层数。

undefined

如果您希望镜像 python 应用程序,请考虑使用 python:3.9-slim 镜像而不是 python:3.9。

python:3.9 的大小约为 1.3 GB,而 python:3.9-slim 的大小仅为 1 GB 左右。

您可以使用alpine版本来进一步减少镜像。 alpine 镜像专门设计为作为容器运行,并且非常小。 python:3.9-alpine 镜像只有 49 MB。

4。使用多阶段构建来减小尺寸

为了显着减小大小,我们可以使用docker的多阶段构建概念。这里我们使用不同的镜像/Dockerfile来构建和打包应用程序代码。

它将 Dockerfile 分成多个阶段,并将所需的工件从一个阶段传递到另一个阶段,然后在最后一个阶段交付具有较小图像大小的最终图像。它显着减小了图像尺寸。

#官方docker构建镜像,使用node:14.17-alpine3.14镜像进行stage-1。
#Stage-1
FROM节点:14.17 -alpine3.14作为构建
#复制所需文件
COPYpublic/home/app/public/
COPYsrc/home/app/src/
# dockerfile 安装多个软件包
RUN apk 添加 g++ make python2
RUN npm 安装 --silent
# 创建构建
RUNnpm 运行构建
RUN apk --清除del python2
#通过复制上一阶段的文件来运行构建。
#Stage-2
FROM Nginx:稳定高山
COPY nginx .conf /etc/nginx/conf.d/default.conf
COPY --from=build /home/app/build /usr/share/nginx/html
EXPOSE80
CMD ["nginx","-g","守护进程关闭;"]

这里我们使用两个阶段从 docker 文件创建镜像。在 Stage-1 中,我们复制代码并构建它,在 stage-2 中,我们在 stage-1 中使用构建的代码在 Nginx 中运行。

5、apt安装中使用 –no-install-recommends 标志

当我们运行 apt install 命令来安装一些软件包时,它会安装一些不需要的推荐软件包。使用 --no-install-recommends 标志可以显着减小图像大小。

来自 ubuntu:最新
RUN apt update -y &&
apt install unzip -y --no-install-recommends && apt install curl --no -安装- 推荐 -y &&
apt install python3 -y --no-install-recommends

如下图所示,由于添加了该标志,带有新标签的图像减少了5MB。当我们想要安装多个软件包时,这将非常有帮助。

相关文章