如何挑选 Docker 基础镜像

如何挑选 Docker 基础镜像

Docker Hub 中查看基础镜像时经常会看到有一些固定的 tag 标识:stretchalpinejessieshim 等,这些标识有什么含义呢?

由于 Docker 容器隔离依赖于 Linux 内核中的相关支持,因此在使用 Docker 时需要确保当前机器中的 Linux 内核包含 Docker 所需的特性。下面简单列举了目前 Docker 官方主要维护的版本都基于哪些 Linux 系统。

操作系统支持的系统版本
CentOSCentOS 7
DebianDebian Wheezy 7.7
DebianJessie 8
DebianStretch 9
DebianBuster 10
FedoraFedora 26Fedora 27
UbuntuUbuntu Trusty 14.04
UbuntuXenial 16.04
UbuntuArtful 17.10

通过上面的表格可以发现,那些基础镜像的 tag 标识代表的是所基于的 Linux 发行版本。

接下来通过 Node 10.18 的基础镜像来看下不同版本的镜像有什么区别:

  • node:<version>-buster

  • node:<version>-stretch

  • node:<version>-jessie

  • node:<version>-slim

    基于 Debian,通过 docker-slim 进行了瘦身,删除了很多公共的软件包,只包含一个 Node 运行的最小环境

  • node:<version>-alpine

    Alpine Linux 是面向安全的轻型 Linux 发行版本。不同于其他的 Linux 发行版本,Alpine 采用 musl libcbusybox 进行构建,减小系统的体积和运行时资源消耗。

通过对比,可以看出基于 Apline 的基础镜像在体积大小上有绝对的优势。对于单独的服务而言,使用 Alpine 镜像构建速度还是很快的。但如果需要同时部署多个服务,那么 Alpine 镜像的优势就没那么大了,毕竟 Docker 的镜像层是共享的。简单的说, docker pull 是增量更新的,在本地存在基础镜像的情况下,传输的只是变更层。

另外,如果需要涉及到编译,Alpine 镜像采用的是 musl libc 而非 glibc,这点需要额外留意。