如果您像我一样,第一次创建Dockerfile并从DockerHub页面中选择镜像时,您会彻底困惑。有时候,像这样的选择会让我们的行动停滞不前,所以也许我们只是用标准的镜像,避免深入研究,这样我们就可以继续我们的项目。

但最好了解Docker镜像类型之间的差异,以便为应用程序或脚本选择正确的Docker镜像。要知道这个决定不是永久的。您可以随时更改Dockerfile中的镜像,并重建镜像。请确保在部署到生产环境之前进行彻底的测试。

简而言之,docker镜像之间的区别在于底层的操作系统。以下是每种类型的介绍

版本

说明

示例

alpine

Alpine Linux 操作系统,它是一个独立发行版本,相比较 Debian 操作系统来说 Alpine,更加轻巧

https://alpinelinux.org/

docker pull node:alpine3.14

squeeze

Debian 6

wheezy

Debian 7

jessie

Debian 8,已存档版本

https://wiki.debian.org/DebianJessie

docker pull node:10.22.0-jessie

stretch

Debian 9,已存档版本

https://wiki.debian.org/DebianStretch

docker pull node:lts-stretch

buster

Debian 10,已存档版本

https://wiki.debian.org/DebianBuster

docker pull node:lts-buster

bullseye

Debian 11,当前旧的稳定(oldstable)版本

https://wiki.debian.org/DebianBullseye

docker pull node:lts-bullseye

full official

根据DockerHub,这是事实上的标准镜像,如果你不确定,你应该使用它。

这些镜像基于最新的稳定Debian操作系统发行版。 当我试图让一个项目快速启动和运行时,我通常会从其中的一个开始,我并不关心最终镜像的大小。完整镜像是最安全的选择

slim

slim的镜像是完整镜像的配对版本。这个镜像通常只安装运行特定工具所需的最小包。以python为例,就是运行python的最小包,node.js同理。

通过省去较少使用的工具,镜像会更小。如果有空间限制且不需要完整版本,请使用此镜像。

但是,在使用这个镜像时,一定要进行彻底的测试!如果您遇到无法解释的错误,请尝试切换到完整的镜像,看看是否能够解决问题。

docker pull node:stretch-slim

docker pull node:buster-slim

alpine

alipine镜像基于alpine linux项目,这是一个专门为容器内部使用而构建的操作系统。在很长一段时间里,这些是最受欢迎的镜像变体,因为它们的尺寸很小。

然而,一些团队正在弃用alpine镜像,因为这些镜像可能会导致难以调试的兼容性问题。具体来说,如果使用python镜像,一些 wheels将被构建成与Debian兼容,并且需要重新编译,才能与基于apline的镜像一起工作。

使用alpine镜像的主要原因是使你得到的镜像尽可能小。基础镜像将小于5MB。python基础镜像(将python添加到基础alpine镜像)目前是78.9MB。这仍然很小。

如果考虑到空间问题,强烈推荐使用此镜像。

它的缺点是不包含一些你可能会需要的包。主要是,它使用了一个更小的musl lib代替glibc。如果您的应用程序有特定的libc需求,您可能会遇到问题。

如果你发现Alpine镜像缺少你需要的东西,你可以直接在Dockerfile中安装它,这样能确保镜像只包含你需要的内容。需要注意,如果您正在安装外部包,您的Dockerfile将会更改。主要的区别是,您将使用apk而不是apt-get来安装包。

对alpine镜像的使用有很多担心之处,所以你需要充分了解它。需要充分阅读文档并研究。 同样,如果您在构建Dockerfile时遇到了无法解释的问题,请尝试切换到完整的镜像,看看是否能解决问题。