我有一个Web应用程序,其中包含两个项目:
我现在需要使用docker对应用程序进行docker大小调整,但是我不确定docker文件中的第一行(我猜是指used environment,source )。
我现在需要做的是两个项目都使用单独的Docker映像,但是由于我对此还很陌生,所以我无法弄清楚两个Dockerfile的第一行应该是什么(在两个项目)。
我正在Windows 10 OS
中开发该项目,其中有节点版本v8.11.1
和expressjs版本4.16.3
。
我尝试使用发现的某些版本(如node:8.11.1-alpine
),但收到警告:`
安全警告:您正在针对Windows从Windows构建Docker映像 非Windows Docker主机。
这让我认为我不仅应该关注节点版本,而且还应该关注操作系统。因此,不确定现在要使用哪些基本图像。
答案 0 :(得分:1)
node:8.11.1-alpine
是完全正确的tag。这个特定的版本基于Alpine Linux-一个轻量级的Linux发行版,由于占用空间小,通常在构建Docker映像时使用。
如果不确定应该选择哪个基本映像,只需阅读the documentation at DockerHub。它列出了当前支持的所有标记,并描述了节点图像的不同样式(“图像变体”部分)。
报价:
图片变体
node
图像有多种风格,每种都是针对特定用例设计的。
node:<version>
这是实际图像。如果不确定自己的需求,则可能要使用这一需求。它既可以用作一次性容器(安装源代码并启动容器以启动应用程序),也可以用作构建其他图像的基础。该标签基于
buildpack-deps
。buildpack-deps
专为系统上具有许多映像的docker普通用户而设计。根据设计,它具有大量极其常见的Debian软件包。这样可以减少需要安装从中获得映像的软件包的数量,从而减小系统上所有映像的整体大小。
node:<version>-alpine
此图片基于Alpine Linux project中流行的the
alpine
official image。 Alpine Linux比大多数分发基础映像小得多(约5MB),因此通常导致更苗条的映像。当希望最终图像尺寸尽可能小时,强烈建议使用此变体。需要注意的主要警告是,它确实使用musl libc而不是glibc and friends,因此某些软件可能会遇到问题,这取决于其libc要求的深度。但是,大多数软件对此没有问题,因此,此变体通常是非常安全的选择。请参阅this Hacker News comment thread,以获取有关可能出现的问题的更多讨论以及使用基于Alpine的图像的一些Pro / Con比较。
为最小化图像大小,通常不会在基于Alpine的图像中包含其他相关工具(例如
git
或bash
)。以该映像为基础,在自己的Dockerfile中添加所需的内容(有关不熟悉如何安装软件包的示例,请参见alpine
image description)。
node:<version>-onbuild
不推荐使用
ONBUILD
图像变体,不鼓励使用它们。有关更多详细信息,请参见docker-library/official-images#2076。虽然
onbuild
变体对于“起步运行”非常有用(在短时间内对Dockerized零化),但由于缺乏以下原因,不建议在项目中长期使用ONBUILD
触发射击时的控制权(另请参见docker/docker#5714
,docker/docker#8240
,docker/docker#11917
)。一旦掌握了项目在Docker中的功能,您可能需要调整
Dockerfile
使其从非onbuild
变体中继承,并从{ {1}}变体onbuild
(将Dockerfile
行移到最后并删除ONBUILD
关键字)到您自己的文件中,这样您就可以更严格地控制它们并为自己和自己提高透明度其他人看着您的ONBUILD
的工作。随着时间的流逝,这也使添加其他要求变得更加容易(例如在执行之前的Dockerfile
步骤之前安装更多软件包)。
ONBUILD
此映像不包含默认标记中包含的常见软件包,而仅包含运行
node:<version>-slim
所需的最少软件包。除非您在将仅部署node
映像且空间有限的环境中工作,否则我们强烈建议使用此存储库的默认映像。