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

这篇具有很好参考价值的文章主要介绍了10 个优化技巧,减少 Docker 镜像大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是 docker?

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

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

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

  1. 安装不必要的软件包会增加攻击面,从而增加安全风险。

  2. 镜像传输需要更多时间。

  3. 部署大镜像需要更多时间。

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

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

1:最小化镜像层

我们可以减少 Dockerfile 中的层数。

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

要减小 docker 镜像大小,请在单个 RUN 或 COPY 指令中执行多个命令来最小化 Dockerfile 中的层数。

FROM ubuntu:latest
RUN apt update  - y
RUN apt install unzip - y
RUN apt install curl - y
RUN apt install python3 - y

与其对每个命令使用单独的指令,不如将它们组合起来:

FROM ubuntu:latest
RUN apt update  -y && \
apt install unzip -y && \
apt install curl -y && \
apt install python3 -y

从下图中可以看出,通过减少层数,可以减少一些 MB 的大小。

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

2:使用 Docker Squash 减小镜像大小

Docker 在构建镜像时创建了很多层。压缩有助于在逻辑层中组织镜像。我们可以控制镜像的结构,而不是让镜像具有多个不必要的层。

您可以使用以下命令安装 docker-squash。

pip install docker-squash

您可以运行以下命令来减小镜像的大小。

docker-squash image:old -t image:new

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

3:使用较小的基础镜像

减小 docker 镜像大小最明显的方法是使用较小的基础镜像。

如果希望为 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 多阶段构建的概念。这里我们使用不同的 images/Dockerfile 来构建和打包应用代码。

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

# Official docker build image, Using  node:14.17-alpine3.14 image for stage-1.
# Stage-1
FROM node:14.17-alpine3.14 as build
# Copy Required files
COPY public /home/app/public/
COPY src /home/app/src/
# dockerfile install multiple packages
RUN apk add g++ make python2
RUN npm install --silent
# Create Build
RUN npm run build
RUN apk --purge del python2
#Run the build by copying the files form previous stage.
# Stage-2
FROM nginx:stable-alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=build /home/app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

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

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

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

FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends

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

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

您可以在 apk add 命令中添加 --no-cache。

6:在 apt install 命令后添加 rm -rf /var/lib/apt/lists/*

我们可以在 apt install 之后添加这个命令来减少 docker 镜像的大小。

FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*

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

从上图中可以看出,我们已将 docker 镜像的大小减少了约 41 MB。

7:使用 .dockerignore 文件

如果您不想将某些文件复制到 docker 镜像,那么使用 .dockerignore 文件可以为您节省一些空间。

在构建上下文中有一些隐藏的文件/文件夹,您可以使用 ADD 或 COPY 命令(如 .git 等)将其传输到镜像。包含一个 .dockerignore 文件以减小 docker 镜像大小是一个很好的做法。

.dockerignore 文件示例。

ignorethisfile.txt
logs/
ignorethisfolder/
.git
.cache
*.md

8:在 RUN 之后放置 COPY

在某些情况下,您对代码进行了细微的更改,并且需要反复从 dockerfile 构建镜像。
在这种情况下,将 COPY 命令放在 RUN 命令之后将有助于减小镜像大小,因为在这种情况下 docker 将能够更好地使用缓存功能。

它将为安装了依赖项的镜像创建缓存,每次更改代码时,docker 都会使用该缓存并创建镜像。它还将减少 docker 构建时间。

#Dockerfile-1
FROM ubuntu:latest
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*
COPY file /home/ubuntu
#Dockerfile-2
FROM ubuntu:latest
COPY file /home/ubuntu
RUN apt update -y && \
apt install unzip -y --no-install-recommends && \
apt install curl --no-install-recommends -y && \
apt install python3 -y --no-install-recommends && \
rm -rf /var/lib/apt/lists/*

在上述情况下,dockerfile-1 将能够比 dockerfile-2 表现得更好。

9:安装后删除软件包

如果您需要在 docker 镜像中安装一些包,并且您是从外部下载它们,那么最好在安装后删除这些包。

例如,如果您希望从 zip 文件安装 AWS CLI V2,那么在成功安装后请记住也删除该 zip 文件。

FROM ubuntu:latest
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \
unzip awscliv2.zip && \
sudo ./aws/install && \
rm awscliv2.zip

10:使用 Docker 镜像缩容工具

有几个dockerfile 优化工具可以帮助你减少 docker 镜像的大小。下面列出了其中一些。

  1. Dive:Dive 是一个开源工具,用于探索 Docker 镜像及其层内容,然后发现缩小 Docker/OCI 镜像大小的方法。

    https://github.com/wagoodman/dive

  2. fromlatest.io:此工具将检查您的 Dockerfile 并检查可以执行的更多步骤以减小镜像大小。

    https://www.fromlatest.io/

  3. Docker Slim:它让你的容器更好、更小、更安全。您可以使用dockerslim 来最小化容器镜像

    https://github.com/slimtoolkit/slim文章来源地址https://www.toymoban.com/news/detail-415934.html

到了这里,关于10 个优化技巧,减少 Docker 镜像大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker镜像构建&优化及上传

    Dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像,另外,使 用 Dockerfile 去构建镜像好比使用 pom 去构建 maven 项目一样,有异曲同工之妙 Dockerfile 是一个包含一组指令的文本文件,用于告诉 Docker 如何构建一个镜像 Dockerfile一般分为四部分

    2024年01月18日
    浏览(32)
  • windows10/11 修改docker镜像存储目录

    windows10/11 修改docker镜像存储目录 docker默认pull的镜像在c盘,随着镜像的增加,C 盘很快就满了,直接影响不少程序的正常使用,使用下面的操作可以将镜像路径移动到其他位置 查看docker的状态 确保docker为关闭状态,如果state下为running时,直接退出docker 关闭所有正在运行的实例

    2024年02月13日
    浏览(38)
  • 什么是docker(docker客户端、镜像、容器、仓库)

    Docker 是一个开源的容器化平台,它可以让开发者打包应用程序及其依赖项成为一个轻量级、可移植的容器,然后在任何环境中运行。Docker 容器将应用程序及其依赖项打包到一个标准化单元中,包括代码、运行时环境、系统工具、系统库等,确保应用程序在不同的环境中具有

    2024年04月10日
    浏览(33)
  • Docker 镜像仓库是什么?有哪些镜像仓库命令?

    (图片来源:Docker架构图) Registry(Docker 仓库) : Docker 仓库用来保存镜像,Docker 官方提供了一个公共的 Docker 仓库,称为 Docker Hub,开发者可以在 Docker Hub 上分享和获取 Docker 镜像。 Docker daemon :Docker daemon 是服务器组件,是 Docker 最核心的后台进程。 Docker 客户端(Client)

    2024年02月20日
    浏览(35)
  • FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装

    网站地址:http://myfs.f3322.net:8020/ 接口地址:http://myfs.f3322.net:8020/ 用户名:admin,密码:admin 备用地址:阿里云Alibaba Cloud Linux 3 备用地址:华为云Huawei Cloud EulerOS 2.0 这里是手册 自行安装docker/podman程序,执行命令,下载镜像。 启动执行命令: (1). network=host,根据系统具体情

    2024年02月11日
    浏览(49)
  • 10 个冷门但又非常实用的 Docker 使用技巧

    jwilder/nginx-proxy                Automated Nginx reverse proxy for docker con…   1846                                    [OK] richarvey/nginx-php-fpm            Container running Nginx + PHP-FPM capable of…   780                               

    2024年04月23日
    浏览(30)
  • Docker chapter 6 镜像构建优化 - 依赖缓存 与 多阶段构建

    old dockerfile # syntax=docker/dockerfile:1  是 Dockerfile 的一个解析器指令,它用于声明构建时使用的 Dockerfile 语法版本。 如果你不指定这个指令,BuildKit 将使用它内置的 Dockerfile 前端版本。声明一个语法版本可以让你自动使用最新的 Dockerfile 版本,而无需升级 BuildKit 或 Docker Engine,

    2024年02月21日
    浏览(40)
  • win10 Docker Desktop 换国内源 及 修改镜像位置

    因网络问题,一般需要使用国内源加快镜像下载速度。在安装完docker destop后,可通过如下四步 修改 镜像源 [1-设置] - [2- Docker Engine] - [3-修改源] - [4- Apple restart] 修改源具体需要添加如下内容 待重启后即可使用国内镜像源 PS:以下所有操作均在 powershell 中运行 Docker Desktop默认

    2024年02月09日
    浏览(37)
  • 【docker】Windows10系统下安装并配置阿里云镜像加速

    提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 打开命令行窗口,执行“winver”命令。 Windows环境Docker必须满足是64位,Home或Pro 21H2(OS内部版本 19044及以上).Enterprise或Education 21H2(OS内部版本 19044及以上)。 Hyper-V是微软的虚拟机,在win10上是自带的,所以通过

    2024年02月14日
    浏览(48)
  • windows10下安装的docker 导出镜像到另一个电脑

    1、在需要导出的windows系统中启动命令窗口,或者启动powershell,记得以管理员方式启动 2、在需要导出的windows系统中启动 docker ,可以看到已有镜像:复制一个镜像的ID,如箭头所示位置有镜像ID复制图标可操作。另外在命令行中输入 docker images 也可以得到镜像列表,其中有短

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包