【问题标题】:Which docker base image to use in the Dockerfile?在 Dockerfile 中使用哪个 docker 基础镜像?
【发布时间】:2018-10-01 10:10:46
【问题描述】:

我有一个 Web 应用程序,它由两个项目组成:

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

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

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

我在Windows 10 OS 开发项目,我的节点版本v8.11.1 和expressjs 版本4.16.3

我尝试了一些我找到的版本(如node:8.11.1-alpine),但我收到了警告:`

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

这让我觉得我不仅应该关心节点版本,还应该关心操作系统。所以不确定现在要使用哪些基础镜像。

【问题讨论】:

  • @jannis 实际上我的问题中的主要关注点不是警告消息(因为您认为它可能是重复的).. 相反,我主要关注的是如何确定从哪个基本图像继承,因为我什至不确定值 (node:8.11.1) 和后缀 (-alpine) 是否正确。

标签: docker docker-compose dockerfile dockerhub


【解决方案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 要求的深度。但是,大多数软件对此没有问题,因此此变体通常是一个非常安全的选择。有关可能出现的问题的更多讨论以及使用基于 Alpine 的图像的一些利弊比较,请参阅 this Hacker News comment thread

为了最小化图像大小,在基于 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 变体继承,并从 onbuild 变体 @ 复制命令987654355@(将ONBUILD 行移动到末尾并删除ONBUILD 关键字)到您自己的文件中,这样您就可以更严格地控​​制它们,并且让您自己和其他人更透明地查看您的Dockerfile 以了解它的作用.这也使得随着时间的推移添加额外的要求变得更容易(例如在执行之前的-ONBUILD 步骤之前安装更多的包)。

node:<version>-slim

此图像不包含默认标记中包含的常用包,仅包含运行node 所需的最小包。除非您在部署node 映像的环境中工作并且您有空间限制,否则我们强烈建议您使用此存储库的默认映像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2016-10-03
    • 2020-02-26
    • 1970-01-01
    • 2017-08-31
    • 2022-01-22
    • 2015-02-15
    相关资源
    最近更新 更多