引言
这是无关如何制作最小化Docker镜像系列文章中的第三篇。 在第一篇文章中,我谈到了如何通过编写更好的Dockerfiles创立较小的镜像,在第二篇文章中,我探讨了如何应用docker-squash压缩镜像层以制作更小的镜像。 这些办法的确很不赖,然而如果咱们抉择的根底镜像很大的话,之前两篇中介绍的办法将杯水车薪。
让咱们看第二篇文章中的例子,Docker Hub上的规范python镜像,如果查看Dockerfile会发现它的根底镜像是Debian jessie。
FROM buildpack-deps:jessie# ensure local python is preferred over distribution pythonENV PATH /usr/local/bin:$PATH...
buildpack-deps:jessie镜像蕴含残缺的Debian jessie发行版,很大。
~$ docker images buildpack-deps:jessieREPOSITORY TAG IMAGE ID CREATED SIZEbuildpack-deps jessie 3b84923989a0 3 weeks ago 614 MB
能够看到占用了614MB的空间,即便压缩它也杯水车薪,因为在根底Distribution中含有大量数据。
Alpine Linux
Alpine Linux是Linux的发行版之一,对于根底装置而言,该发行版十分小。 然而,即便它很小,它依然具备一个不错的软件包存储库,其中蕴含许多软件包。 它还有相似于apt-get或yum的工具,可轻松装置这些软件包。
~$ docker images alpine:3.6REPOSITORY TAG IMAGE ID CREATED SIZEalpine 3.6 a41a7446062d 5 days ago 3.966 MB
仅仅只有3.96 MB,与614MB的Debian jessie镜像相比,这是一个微小的劣势。 许多规范Docker映像都很不便地提供了Alpine Linux版本,通常,它具备-alpine后缀。 来看一个python的例子。
~$ docker images python:2.7.13-alpineREPOSITORY TAG IMAGE ID CREATED SIZEpython 2.7.13-alpine 3dd614730c9c 4 days ago 72.02 MB
Python VM占用了约72MB的内存,远小于Debian python镜像的670MB。
应用Alpine构建镜像
应用Alpine构建镜像并应用Dockerfile中的apk工具装置Alpine软件包,通过执行以下操作来检出git repo。
FROM alpine:3.6RUN apk add --update git && \ git clone https://github.com/example/myrepo.git && \ rm myrepo/.git && \ apk del git && \ rm -rf /var/cache/apk/*CMD ['/myrepo/myapp']
在https://pkgs.alpinelinux.org/...