前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么你们制作镜像只有5MB,而我却200MB?

为什么你们制作镜像只有5MB,而我却200MB?

作者头像
陌溪
发布2021-07-20 10:56:04
1K0
发布2021-07-20 10:56:04
举报

大家好,我是陌溪,欢迎点击下方的公众号名片,关注陌溪,让我们一起成长~

这阵子陌溪发现只要带着 alpine 前缀的镜像,相比于其它的镜像,体积都相对较小,例如下面这些

代码语言:javascript
复制
java:alpine
nginx:alpine

后面通过了解,发现了其实这些 java 镜像,或者 nginx 镜像都依赖于某个 linux 操作系统,我们常见的操作系统有 ubuntucentosdebian。而这个 alpine 其实也是一个新的操作系统。但是它比其它的操作系统而言,体积更小,所以在他们的基础之上做的镜像,体积也会更小,常见的 linux 操作系统体积大小,如下所示

代码语言:javascript
复制
REPOSITORY          TAG           IMAGE ID          VIRTUAL SIZE
alpine              latest        4e38e38c8ce0      4.799 MB
debian              latest        4d6ce913b130      84.98 MB
ubuntu              latest        b39b81afc8ca      188.3 MB
centos              latest        8efe422e6104      210 MB

我们也就发现了 alpine 的大小远远小于其它的操作系统,因此制作出来的镜像大小也远远小于其它的镜像。

Alpine操作系统

Alpine 操作系统主要是面向安全的轻量级 Linux 发行版,它和其它的发行版不同之处在于,Alpine 采用了musllibcbusybox 以减少系统体积和运行时资源消耗,但功能上比 busybox 又完善的多 ,因此越来越得到开源社区的青睐。在保持瘦身的同时,Alpine 还提供了自己的包管理工具【 CentOSyumubuntuapt-get】,可以通过 Alpine包查询网站 来进行查看,例如下图所示,搜索自己需要安装的包进行查看

Alpine包查询网站: https://pkgs.alpinelinux.org/packages

Alpine包查询

如果想在 Apline 镜像中使用 vim 命令的话,只需要应用包管理工具 apk 安装即可

代码语言:javascript
复制
apk add vim

Alpine Docker 镜像也继承了 Alpine Linux 发行版的优势,相比于其它的 Docker 镜像,它的容量体积非常小,仅仅只有 5MB,我们通过打开 DockerHubAlpine 的官网

代码语言:javascript
复制
官网:https://registry.hub.docker.com/_/alpine

alpine查询

可以发现,它提供了只有 5MB 的系统镜像可供我们进行下载使用

代码语言:javascript
复制
# 下载alpine镜像
docker pull alpine

同时,它还列举了一个例子 ,通过 alpine 制作一个 mysql 镜像

制作mysql镜像

使用 AlpineUbuntu 制作出来的镜像一个是 36.8MB,一个是 145MB,相差 4 倍多

目前 Docker 官方已经开始推荐 Alpine 替代之前的 Ubuntu 作为基础镜像环境,这样所带来的好处包括:镜像下载速度更快、镜像安全性提高、主机之间的切换更方便、占用内存更少等特点。

使用Alpine镜像

我们通过下面命令,能够非常快的运行一个 Alpine 容器【本地不存在会去官方下载】,并输出 hello alpine

代码语言:javascript
复制
docker run alpine echo "hello alpine"

运行alpine镜像

迁移至Alpine

目前,大部分 Docker 官方镜像,都已经提供了 Alpine 版本镜像的支持,我们非常容易镜像迁移

例如,通过 nginx 的 官方 DockerHub 地址,我们可以看到,也专门有 alpine 稳定版本

nginx: https://registry.hub.docker.com/_/nginx

nginx的alpine版本

还有其它一些官方镜像也都提供了 alpine 版本,我们可以在 DockerHub 上进行搜索即可

代码语言:javascript
复制
ubuntu/debian -> alpine
python:2.7 -> python:2.7-alpine
ruby:2.3 -> ruby:2.3-alpine

另外,如果我们想要在 alpine 的基础上进行一些软件的安装,可以使用下面的命令

代码语言:javascript
复制
apk add --no-cache <package>

同时如果细心看过蘑菇博客镜像制作过程的小伙伴,可以看到对应项目的 Dockerfile 文件依赖的基础镜像,其实就是带有 alpine 后缀的精简镜像。

alpine镜像在蘑菇中的使用

思考

上面其实我们已经提到了很多关于 alpine 的优势,比如体积小,并且很多官方的 Docker 镜像都提供了基于alpine 的版本。那如果 alpine 版本没有任何坑的话,从体积小,并且能满足使用正常使用的话,这相比于CentOSUbuntuDebian 的镜像,就拥有非常大的优势了,那么以后这些发行版的进行也就没有存在的必要,真实是这样的么?

下面是针对上述问题,最后的总结

  • 首先在基于 alpine 的操作系统上编写 Dockerfile 制作新镜像,并不会像其他操作系统一样方便,甚至会出现alpine中不存在的情况。
  • 虽然每个单个的基于 alpine 的软件镜像是明显少于其他操作系统,但是如果多个镜像【包括每个镜像运行的多个容器】,使用 了同一个基础镜像,是不会花费额外的空间【归结于 dockerOverlay 文件系统】
  • 有些软件没办法在 Alpine 中运行,因为 alpine 不像其它发行版那样使用 CGLIBC

参考

  • Alpine 官网:http://alpinelinux.org/
  • Alpine 官方仓库:https://github.com/alpinelinux
  • Alpine 官方镜像:https://hub.docker.com/_/alpine/
  • Alpine 官方镜像仓库:https://github.com/gliderlabs/docker-alpine

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陌溪教你学编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Alpine操作系统
  • 使用Alpine镜像
  • 迁移至Alpine
  • 思考
  • 参考
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档