关于docker:创建最小化的容器镜像三

41次阅读

共计 1285 个字符,预计需要花费 4 分钟才能阅读完成。

引言

这是无关如何制作最小化 Docker 镜像系列文章中的第三篇。在第一篇文章中,我谈到了如何通过编写更好的 Dockerfiles 创立较小的镜像,在第二篇文章中,我探讨了如何应用 docker-squash 压缩镜像层以制作更小的镜像。这些办法的确很不赖,然而如果咱们抉择的根底镜像很大的话,之前两篇中介绍的办法将杯水车薪。

让咱们看第二篇文章中的例子,Docker Hub 上的规范 python 镜像,如果查看 Dockerfile 会发现它的根底镜像是 Debian jessie。

FROM buildpack-deps:jessie
# ensure local python is preferred over distribution python
ENV PATH /usr/local/bin:$PATH
...

buildpack-deps:jessie 镜像蕴含残缺的 Debian jessie 发行版,很大。

~$ docker images buildpack-deps:jessie
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
buildpack-deps      jessie              3b84923989a0        3 weeks ago         614 MB

能够看到占用了 614MB 的空间,即便压缩它也杯水车薪,因为在根底 Distribution 中含有大量数据。

Alpine Linux

Alpine Linux 是 Linux 的发行版之一,对于根底装置而言,该发行版十分小。然而,即便它很小,它依然具备一个不错的软件包存储库,其中蕴含许多软件包。它还有相似于 apt-get 或 yum 的工具,可轻松装置这些软件包。

~$ docker images alpine:3.6
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              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-alpine
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
python              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.6
RUN 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/…

正文完
 0