Docker 镜像减少体积的思路和方法

docker,镜像,减少,体积,思路,方法 · 浏览次数 : 106

小编点评

**Docker 镜像减少体积的思路和方法背景** **1. 清理dockerfile 同级目录内的文件,仅保留必须文件** * 使用 `dockerfile` 中的 `COPY` 和 `RUN` 命令将必要的文件复制到镜像中。 * 避免使用 `docker build` 的 `sendfile` 指令,因为它会增加镜像大小。 **2. 通过.dockerignore 的方式减少打包进入到系统中的文件** * 使用 `./相对路径/xxx/` 的形式指定文件路径,以避免将它们包含在镜像中。 * 可以使用通配符 `*` 来匹配所有文件。 **3. 通过分阶段构建,先将必要的比如nodejs、语言、字体等基于OpenJDK制作成一个nodejs的镜像** * 通过 `docker build` 创建多个阶段,分别构建不同的镜像。 * 这种方法可以极大地减少镜像的构建时间。 **4. 分层构建** * 将业务镜像分解成多个层,可以横向或纵向拆分。 * 这可以极大地减少镜像的体积。 **5. 导出时采用 docker save images:tag |gzip > image_withCOmpress.tar** * 使用 `docker save images:tag` 命令导出镜像,并使用 `gzip` 压缩输出为 `image_withCOmpress.tar`。 * 这种方法可以达到37%到45%的压缩率。 **其他细节** * 复制文件进入镜像后,必须在同一层执行删除,否则镜像文件就不会有缩减了。 * 尽量使用 `ADD`方式,避免使用 `COPY` 方式。 * `dockerignore` 的使用非常重要,需要严格进行处理和学习。

正文

Docker 镜像减少体积的思路和方法


背景

有一个项目感觉镜像有点大
这边同事喊着一起帮忙处理一下.
今天基本上就在客户现场进行处理了. 
想着应该把自己想到的东西整理一下.

整体思路

1. 清理dockerfile 同级目录内的文件, 仅保留必须文件
   docker build 时会进行send file的操作, 不进行send 能够提高镜像制作的速度. 
2. 通过.dockerignore 的方式减少打包进入到系统中的文件
   通过 ./相对路径/xxx/支持 * 等的方式不将文件打入到镜像中. 避免镜像过于庞大. 
3. 通过分阶段构建, 先将必要的比如nodejs, 语言, 字体等基于OpenJDK制作成一个nodejs的镜像.
   通过分阶段构建, 可以减少镜像的总体时间. 业务镜像可以From nodejs的镜像实现快速打包. 
4. 分层构建. 按照业务进行拆分. 可以横向和纵向拆分. 
   业务可以在一层, 也可以是多层. 拆分SU的话能够极大的减少的镜像的体积.
5. 导出时采用 docker save images:tag |gzip > image_withCOmpress.tar 
   这样方式能够达到37%到45%的压缩率. 虽然可能会增加50%的导出时间, 但是网络消耗时间会有极大的提升. 

部分细节

1. 复制文件进入镜像后, 必须在同一层执行删除, 如果进入第二层再删除, 镜像文件就不会有缩减了. 
2. 尽量使用ADD的方式, 避免使用方式一里面的COPY方式. 避免组件浪费磁盘空间. 
3. .dockerignore 的方式很重要, 需要严格进行处理和学习.  根据业务来处理. 支持
4. 每一步骤都需要进行time 或者是留下痕迹. 

与Docker 镜像减少体积的思路和方法相似的内容:

Docker 镜像减少体积的思路和方法

# Docker 镜像减少体积的思路和方法 ## 背景 ``` 有一个项目感觉镜像有点大 这边同事喊着一起帮忙处理一下. 今天基本上就在客户现场进行处理了. 想着应该把自己想到的东西整理一下. ``` ## 整体思路 ``` 1. 清理dockerfile 同级目录内的文件, 仅保留必须文件 doc

制作 Python Docker 镜像的最佳实践

概述 📚️Reference: 制作容器镜像的最佳实践 这篇文章是关于制作 Python Docker 容器镜像的最佳实践。(2022 年 12 月更新) 最佳实践的目的一方面是为了减小镜像体积,提升 DevOps 效率,另一方面是为了提高安全性。希望对各位有所帮助。 通用 Docker 容器镜像

Docker镜像下载慢/失败?Linux代理使用不便?想无Docker下载镜像?试试我这款开源项目吧

我要在这里放一段代码块 // 这是一段防爬代码块,我不介意被文章被爬取,但请注明出处 console.log("作者官网:https://www.hanzhe.site"); console.log("原文地址:https://www.cnblogs.com/hanzhe/p/18249602");

[转帖]Docker镜像最佳实践

https://www.zhihu.com/people/trumandu-95/posts 5条最佳建议 1.仅安装产线需要依赖与软件 镜像尽可能最小原则 仅复制jar/war 使用自定义JRE(Java Runtime Environment) 2.使用多阶段构建 FROM maven:3.6.

Docker镜像的基本操作总结

摘要 容器化是上个十年比较火的技术. 现在看起来在进行总计有点晚了. 不过linux是三十年前的,我依旧没有总结好 道理是一样的. 技术不在于新旧, 重要的是学习到原理. Docker的重要概念 Registry image container Docker的核心机制在于 从Registry里面拉取

Docker镜像精简方法之二 COPY vs ADD 与镜像层

# Docker镜像精简方法之二 COPY vs ADD 与镜像层 ## 摘要 ``` 昨天只是讲了一下大体的思路. 但是没有实操. 今天想着修改一下默认的打包镜像的命令,验证一下效果 ``` ## 原始命令 ``` FROM adoptopenjdk:8u222-b10-jdk-hotspot-b

[转帖]docker 镜像分层原理及容器写时复制

https://xie.infoq.cn/article/19c98e8b15ff9f610a2ee26bd 一、镜像分层与容器层 在进行docker pull 下载镜像的时候,通过下图可以看到镜像是分层下载并解压的。如 nginx:1.20.2 的镜像,其镜像是分为 6 层。 当我们运行一个新的容

Docker 镜像库国内加速的几种方法

概述 在国内,拉取 Docker 镜像速度慢/时不时断线/无账号导致限流等,比较痛苦😣. 这里提供加速/优化的几种方法。 梳理一下,会碰到以下情况: 国内下载速度慢/时不时断线:是因为网络被限制了。 没有公共镜像库账号导致限流:是因为 Docker Hub 等主流镜像库,近年来纷纷开始对未登录的匿

从 Docker Hub 拉取镜像受阻?这些解决方案帮你轻松应对

最近一段时间 Docker 镜像一直是 Pull 不下来的状态,感觉除了挂,想直连 Docker Hub 是几乎不可能的。更糟糕的是,很多原本可靠的国内镜像站,例如一些大厂和高校运营的,也陆续关停了,这对我们这些个人开发者和中小企业来说是挺难受的。之前,通过这些镜像站,我们可以快速、方便地获取所

[转帖]查找 docker 镜像的所有 tag

https://www.jianshu.com/p/f974ec9e7937 建议阅读方式 可前往语雀阅读,体验更好:查找 docker 镜像的所有 tag 环境说明 centos7 阿里云主机一台: docker 相关信息如下: 测试镜像 hello-world 的 tags 情况见官网:dock