在Dockerfile中使用哪个Docker基本映像?

时间:2018-10-01 10:10:47

标签: docker docker-compose dockerfile dockerhub

我有一个Web应用程序,其中包含两个项目:

  • 使用VueJS作为前端部分;
  • 使用ExpressJS作为后端部分;

我现在需要使用docker对应用程序进行docker大小调整,但是我不确定docker文件中的第一行(我猜是指used environmentsource )。

我现在需要做的是两个项目都使用单独的Docker映像,但是由于我对此还很陌生,所以我无法弄清楚两个Dockerfile的第一行应该是什么(在两个项目)。

我正在Windows 10 OS中开发该项目,其中有节点版本v8.11.1和expressjs版本4.16.3

我尝试使用发现的某些版本(如node:8.11.1-alpine),但收到警告:`

  

安全警告:您正在针对Windows从Windows构建Docker映像   非Windows Docker主机。

这让我认为我不仅应该关注节点版本,而且还应该关注操作系统。因此,不确定现在要使用哪些基本图像。

1 个答案:

答案 0 :(得分:1)

对于节点图像,

node:8.11.1-alpine是完全正确的tag。这个特定的版本基于Alpine Linux-一个轻量级的Linux发行版,由于占用空间小,通常在构建Docker映像时使用。

如果不确定应该选择哪个基本映像,只需阅读the documentation at DockerHub。它列出了当前支持的所有标记,并描述了节点图像的不同样式(“图像变体”部分)。

报价:

  

图片变体

     

node图像有多种风格,每种都是针对特定用例设计的。

     

node:<version>

     

这是实际图像。如果不确定自己的需求,则可能要使用这一需求。它既可以用作一次性容器(安装源代码并启动容器以启动应用程序),也可以用作构建其他图像的基础。该标签基于buildpack-depsbuildpack-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的图像中包含其他相关工具(例如gitbash)。以该映像为基础,在自己的Dockerfile中添加所需的内容(有关不熟悉如何安装软件包的示例,请参见alpine image description)。

     

node:<version>-onbuild

     

不推荐使用ONBUILD图像变体,不鼓励使用它们。有关更多详细信息,请参见docker-library/official-images#2076

     

虽然onbuild变体对于“起步运行”非常有用(在短时间内对Dockerized零化),但由于缺乏以下原因,不建议在项目中长期使用ONBUILD触发射击时的控制权(另请参见docker/docker#5714docker/docker#8240docker/docker#11917)。

     

一旦掌握了项目在Docker中的功能,您可能需要调整Dockerfile使其从非onbuild变体中继承,并从{ {1}}变体onbuild(将Dockerfile行移到最后并删除ONBUILD关键字)到您自己的文件中,这样您就可以更严格地控​​制它们并为自己和自己提高透明度其他人看着您的ONBUILD的工作。随着时间的流逝,这也使添加其他要求变得更加容易(例如在执行之前的Dockerfile步骤之前安装更多软件包)。

     

ONBUILD

     

此映像不包含默认标记中包含的常见软件包,而仅包含运行node:<version>-slim所需的最少软件包。除非您在将仅部署node映像且空间有限的环境中工作,否则我们强烈建议使用此存储库的默认映像。