在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快。

\\

但RUN语句总是会创建一个新层,而且在生成镜像之前还需要使用很多中间文件,在这种情况下,该如何获得体积更小的镜像呢?

\\

你可能已经注意到了,大多数Dockerfiles都使用了一些奇怪的技巧:

\\

\FROM ubuntu\RUN apt-get update \u0026amp;\u0026amp; apt-get install vim

\\

为什么使用\u0026amp;\u0026amp;?而不是使用两个RUN语句代替呢?比如:

\\

\FROM ubuntu\RUN apt-get update\RUN apt-get install vim

\\

从Docker 1.10开始,COPY、ADD和RUN语句会向镜像中添加新层。前面的示例创建了两个层而不是一个。

\\



\\

镜像的层就像Git的提交(commit)一样。

\\

Docker的层用于保存镜像的上一版本和当前版本之间的差异。就像Git的提交一样,如果你与其他存储库或镜像共享它们,就会很方便。

\\

实际上,当你向注册表请求镜像时,只是下载你尚未拥有的层。这是一种非常高效地共享镜像的方式。

\\

但额外的层并不是没有代价的。

\\

层仍然会占用空间,你拥有的层越多,最终的镜像就越大。Git存储库在这方面也是类似的,存储库的大小随着层数的增加而增加,因为Git必须保存提交之间的所有变更。

\\

过去,将多个RUN语句组合在一行命令中或许是一种很好的做法,就像上面的第一个例子那样,但在现在看来,这样做并不妥。

\\

1. 通过Docker多阶段构建将多个层压缩为一个

\\

当Git存储库变大时,你可以选择将历史提交记录压缩为单个提交。

\\

事实证明,在Docker中也可以使用多阶段构建达到类似的目的。

\\

在这个示例中,你将构建一个Node.js容器。

\\

让我们从index.js开始:

\\

\const express = require('express')\const app = express()\app.get('/', (req, res) =\u0026gt; res.send('Hello World!'))\app.listen(3000, () =\u0026gt; {\  console.log(`Example app listening on port 3000!`)\})

\\

和package.json:

\\

\{\  \"name\": \"hello-world\

三个技巧,将Docker镜像体积减小90%相关推荐

  1. Docker学习总结(41)——三个技巧,将Docker镜像体积减小90%

    一.前言 在构建Docker容器时,应该尽量想办法获得体积更小的镜像,因为传输和部署体积较小的镜像速度更快.但RUN语句总是会创建一个新层,而且在生成镜像之前还需要使用很多中间文件,在这种情况下,该如 ...

  2. linux 缩小链接库体积,两个奇技淫巧,将 Docker 镜像体积减小 99%

    原标题:两个奇技淫巧,将 Docker 镜像体积减小 99% 前言 对于刚接触容器的人来说,他们很容易被自己构建的 Docker 镜像体积吓到,我只需要一个几 MB 的可执行文件而已,为何镜像的体积会 ...

  3. Docker的基本使用(部署python项目)+两个奇技淫巧,将 Docker 镜像体积减小 99%

    两个奇技淫巧,将 Docker 镜像体积减小 99% 使用Docker运行程序 Docker的基本使用(部署python项目) 一.准备项目 我写的是一个爬取某ppt网站的代码,就一个ppt1.py是 ...

  4. c语言将一段英文镜像输出,两个奇技淫巧,将 Docker 镜像体积减小 99%

    原标题:两个奇技淫巧,将 Docker 镜像体积减小 99% 对于刚接触容器的人来说,他们很容易被自己构建的 Docker 镜像体积吓到,我只需要一个几 MB 的可执行文件而已,为何镜像的体积会达到 ...

  5. Docker 镜像制作教程:减小镜像体积 两个技巧,将 Docker 镜像体积减小 99%

    对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积吓到,我只需要一个几 MB 的可执行文件而已,为何镜像的体积会达到 1 GB 以上?本文将会介绍几个奇技淫巧来帮助你精简镜像,同时 ...

  6. 两个奇技淫巧,将 Docker 镜像体积减小 99%

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 前言 对于刚接触容器的人来说,他们很容易被自己构建的 D ...

  7. Docker镜像瘦身

    Docker 是一个用于开发,交付和运行应用程序的开发平台. 它能够将应用程序和基础架构分开,保证开发,测试, 部署的环境完全一致,从而达到快速交付的目的. 但是在实际项目中,会对项目中的模块或者服务 ...

  8. iso镜像添加软件包_超薄Docker容器-减少Docker镜像大小的指南

    Photo by William Warby on Unsplash 您是否曾经想过为什么您的单应用程序Docker容器会增长到400 MB? 或者,也许为什么一个只有几十MB的应用程序二进制文件会生 ...

  9. 019.nexus搭建docker镜像仓库/maven仓库

    一.安装docker CE 参考docker doc https://docs.docker.com/install/linux/docker-ce/centos/ 二.docker启动nexus3 ...

最新文章

  1. 【BLE MIDI】推荐一个 Android 平台开源 MIDI 软件 MidiSheetMusic ( 相关资料 | Android Studio 中导入 Eclipse 源码 )
  2. 显示数量_SOLIDWORKS 标注螺纹不显示数量?Why
  3. FPGA 状态机设计
  4. Sqlite3中replace语句用法详解
  5. 为什么我建议每个开发人员都需要学Python?不看会后悔!
  6. c语言飞机订票系统设计,飞机订票系统设计
  7. 2017.4.23 一元三次方程求解 思考记录
  8. java类和对象数组传参_java对象,数组作为参数传递给
  9. 敲黑板划重点!「PV,UV流量预测算法大赛」明日结果提交最后1天!
  10. Windows核心编程_修改其它进程里的内存值+示例:修改游戏分数
  11. Linux7.2虚拟机连接电脑相关配置
  12. oracle crystall ball,Oracle Crystal Ball
  13. 抓包工具之fiddler
  14. 怎么给计算机管理设置密码,如何给电脑设置密码
  15. 基于微信小说平台小程序系统设计与实现 开题报告
  16. 整理一些简历制作、工作、面试、招聘网站资源分享
  17. sort-选择排序法
  18. spring中AspectJ
  19. 编写一个学生类(Students),包括姓名(name)、性别(sex)、学号(num)、语文课(Chinese)、英语课(English)、 数学课(Math)和平均值(avg),方法包括求
  20. strcat函数 strncat函数

热门文章

  1. STM32FLASH读写程序
  2. vue+elementui项目打包后样式变化问题
  3. iframe 内嵌第三方网站 cookie 失效,解决办法
  4. 一、进程的概念、组成和特征
  5. 手把手教你用anaconda安装pytorch最新版
  6. Python常用函数与技巧总结(一)
  7. mysql 查询语句 参数,mysql参数化查询语句有关问题
  8. php7.0 连接ftp,PHPstorm连接ftp
  9. redis持久化 mysql_Redis 如何保持和MySQL数据一致
  10. 3模型大小_分布式训练中数据并行远远不够,「模型并行+数据并行」才是王道...