use*_*695 13 node.js docker alpine-linux
我正在运行一个nodeJS应用程序集群 - 它应该非常小,因为它们作为微服务运行.只有少数人需要额外的东西,如bcrypt或imagemagick - 这对我来说不时会有些麻烦.
现在我node:10.13-alpine用作所有Dockerfiles的基本映像来构建我的应用程序.对于其中一些我需要通过apk等添加依赖项.所以这些图像变大了.这是使用高山图像的最佳方法,通过添加所需的包(例如python,gcc ......)来增加图像?或者我应该使用完整的图像?
如果我会使用node:10.13,基本图像会更大,但如果我的理解是正确的,我的应用程序只会添加一个小层,因为使用相同的基本图像.所以最后使用一个大节点图像会更好?
Chr*_*ler 10
Alpine图像较小,因为其他软件包使用了很多库,而您的解决方案并未使用这些库.
使用小图片有什么好处?
好处是:更少的内存,更好的性能,安全性和可维护性.
较小的docker镜像会减小磁盘所需的大小,但磁盘空间很便宜.
更重要的是它还消耗更少的内存,这在每台服务器上都是有限的.如果减少服务器上的基本映像数量,这也会导致您需要更少的内存.内存越少意味着交换越少,因此在将所有基本映像加载到内存中时可以获得一些性能改进.
另一个特点是,使用较少依赖库的高山基础图像,这提高了整体安全性.您可以使用基本的高山图像轻松分离风险,并使用仅使用真正需要的apk的顶级图像.这在整体维护方面也具有优势.
您可以在https://hub.docker.com/r/library/node/tags/上看到,alpine版本没有漏洞.所有其他映像版本都有一些问题,可能会针对您的解决方案的安全性.
为什么默认仍然是"buildpack-deps"以及为什么你应该使用它们?
当您阅读节点的docker镜像的官方文档时:
https://hub.docker.com/_/node/
主要内容是:
对我来说,这意味着,如果您使用"buildpack-deps"构建的其他图像,大多数情况下您可以使用普通包.它可能是更好的解决方案,在这种情况下,因为除了"buildpack-deps"之外你不需要在你的磁盘和内存中保存一个"高山"基本图像.
结论
如果您在docker环境中"只有"高山图像,那么您应该使用"alpine"或者"节点"容器的安全性对您来说非常重要.
在大多数情况下,基于"buildpack-deps"的"节点"图像是合适的,因为您有其他基于"buildpack-deps"的docker容器.
在未来,我假设基于"alpine"可以提供越来越多的包装,然后你应该选择node-alpine.
一般来说,是的高山图像比预先添加的二进制文件带来的官方节点图像更好.
但这是高度具体的案例.
libpng16-dev包,它只适用于官方节点图像,我无法弄清楚为什么即使在尝试了几天之后它也不适用于节点alpine).总而言之,除非你有一个复杂的设置,官方节点图像让你更容易,否则选择节点alpine是一个好主意.
我使用的几乎所有节点容器中,90%都运行在高山图像上.
| 归档时间: |
|
| 查看次数: |
675 次 |
| 最近记录: |