在 容器崛起之前,Alpine 还是个无名之辈,可能是因为大家并不是很关心操作系统本身的大小,毕竟大家只关心业务数据和文档,程序、库文件和系统本身的大小通常可以忽略不计。

容器技术席卷整个软件产业之后,大家都注意到了一个问题,那就是容器的镜像太大了,浪费磁盘空间,拉取镜像的时间也很长。于是,人们开始寻求适用于容器的更小的镜像。对于那些耳熟能详的发行版(例如 Ubuntu、Debian、Fedora)来说,只能通过删除某些工具(例如 ifconfignetstat)将镜像体积控制在 100M 以下。而对于 Alpine 而言,什么都不用删除,镜像大小也就只有 5M 而已。

Alpine 镜像的另一个优势是包管理工具的执行速度非常快,安装软件体验非常顺滑。诚然,在传统的虚拟机上不需要太关心软件包的安装速度,同一个包只需要装一次即可,无需不停重复安装。容器就不一样了,你可能会定期构建新镜像,也可能会在运行的容器中临时安装某些调试工具,如果软件包的安装速度很慢,会很快消磨掉我们的耐心。

Alpine操作系统是一个面向安全的轻型Linux发行版。它不同于通常的Linux发行版,Alpine采用了musl libc和BusyBox以减小系统的体积和运行时资源消耗,但功能上比BusyBox又完善得多。在保持瘦身的同时,Alpine还提供了自己的包管理工具apk,可以通过https://pkgs.alpinelinux.org/packages查询包信息,也可以通过apk命令直接查询和安装各种软件。

Alpine Docker镜像也继承了Alpine Linux发行版的这些优势。相比于其他Docker镜像,它的容量非常小,仅仅只有5MB左右(Ubuntu系列镜像接近200MB),且拥有非常友好的包管理机制。官方镜像来自docker-alpine项目。

在制作docker镜像时,使用 multi stage 构建各个不同阶段的命令文件,最终copy到busybox或alpilne中执行。这样做得好处有二:

  1. 保持镜像最小,busybox,alpine 是最小的操作系统镜像

  2. 有各种linux工具使用,busybox本身是一个linux工具集

  3. 构建stage建议使用alpine和其它的官方包, 主要理由是此镜像比busybox稍大,但是比其他的系统镜像都小,有人就问了,为撒不用busybox呢,因为busybox没有包管理工具,这带来很多不便;这点也是busybox和alpine的主要区别

下面我们来看一看.NET 和 Java的 alpine 的镜像情况:

当前Java 没有针对Alpine的官方稳定的OpenJDK 11构建,虽然 https://adoptopenjdk.net/ 拥有Alpine对Java 11的官方支持:https://hub.docker.com/r/adoptopenjdk/openjdk11

从.NET Core 1.0开始 .NET 就有针对Alpine 的官方稳定的.NET 构建,对Alpine 有非常好的支持,因为它包含的软件包更少,并且由于其表面积的减少,似乎具有更有限的CVE暴露:https://hub.docker.com/_/microsoft-dotnet-runtime

相关文章:

最新文章

  1. 前端之web上传文件的方式
  2. poj-1410 Intersection
  3. IOS开发/iphone开发多线程
  4. VIM_插件
  5. [JS]Javascript的this用法
  6. NET平台和C#
  7. js中完数的输出
  8. 【Cocos2d-X游戏实战开发】捕鱼达人之游戏场景的创建(六)
  9. JS中格式化数据保留两位小数
  10. JavaWeb总结(一)—Servlet
  11. Winform开发框架中工作流模块的表设计分析
  12. Android图片setBackgroundResource和setImageResource的区别
  13. HBase缓存的使用
  14. Linux:Day9(上) 压缩工具
  15. MongoDB、Hbase、Redis等NoSQL分析
  16. fMRI在认知心理学上的研究
  17. AngularJS $observe $watch
  18. 20145304 Exp9 Web安全基础实践
  19. geoserver笔记
  20. 【HDU】2866:Special Prime【数论】

热门文章

  1. Pointcut 表达式
  2. 使用IDEA开发的java compiler经常会自动变为1.5
  3. windows10使用VS(VC++)创建c++多进程命名管道通信
  4. 【LeetCode】1162. 地图分析 As Far from Land as Possible(Python)
  5. 【LeetCode】412. Fizz Buzz 解题报告(Python)
  6. 【LeetCode】79. Word Search 解题报告(Python & C++)
  7. JUC之线程间的通信
  8. [数学]高数部分-Part VI 重积分
  9. 【计理01组03号】Java基础知识
  10. Java高级程序设计笔记 • 【第6章 设计模式】