Vac*_*ano 5 containers docker alpine-linux
我正在公司设计应用程序的容器化。当我查看容器时,我看到很多关于 Alpine 的讨论。
讨论的基本内容围绕着 Alpine 的规模展开。Alpine 比其他 Linux 发行版小得多。Alpine 的大小为 5 MB(小得惊人),而 Ubuntu 的大小为 188 MB。
但我感到困惑的是为什么这真的很重要。包含操作系统的 docker 层应该只需要下载到机器一次(假设所有容器使用相同的基础镜像)。
例如,假设我有 50 个应用程序,每个应用程序放入 1 个容器中。它们每个都需要 50 MB,我在 docker 上运行它们。
这仅存在 7% 的差异。磁盘空间并不是很昂贵。因此,Ubuntu 运行所有容器所需的额外 183 MB 似乎并不重要。
但Alpine确实有很多人气。所以我不得不认为我错过了一些东西。也许它使用更少的内存?或者它更快?
Alpine Linux 发行版中的哪些功能促使 Docker 选择它作为其主要容器平台?
这取决于您使用的编程语言;对于 Python 我觉得 Alpine 是一个坏主意:
没有二进制轮子,因此您需要重新编译所有内容,这意味着您需要安装编译器工具链,从而使较小的映像变得毫无意义。
Alpine 使用的替代 libc musl 历史上存在一些细微的差异,这些差异会导致恼人的错误,例如,有一次 DNS 在 WeWork 办公室的 Minikube 中无法工作(!),因为 WeWork 当时的 DNS 设置不稳定,与公认的 DNS 交互不良。必须做出符合 RFC 的决定。
(较长版本:https://pythonspeed.com/articles/base-image-python-docker-images/)
第一个问题与 Go 无关,而对于第二个问题,Go 主要绕过 libc 并直接执行系统调用。所以对于 Go 我认为基本上没问题。
| 归档时间: |
|
| 查看次数: |
2432 次 |
| 最近记录: |