用于运行nodejs app的2种Dockerfiles之间的差异

时间:2016-07-04 12:22:04

标签: docker

我正在尝试将nodejs应用程序作为docker容器运行。我想知道以下两个Dockerfile片段的性能或图像大小是否会有任何差异

From ubuntu:14.04  
RUN apt-get install -y nodejs npm  

FROM node:4.4.7

(假设安装的节点版本相同) 我的理解是,第一个将拉入ubuntu映像并在其上安装节点。我不确定在第二种情况下会发生什么。这会根据本机操作系统而有所不同吗?

3 个答案:

答案 0 :(得分:2)

hub.docker.com上的节点包包含其Dockerfile。它基于Debian Jessie环境,并从其他图像中提取多个构建工具:

operator()

您可以随时查看相关图片的public以查看有关该图片的更多详细信息,但这并未提供有关添加和复制到图片中的内容的详细信息,通常是如何创建基本图像:

FROM buildpack-deps:jessie

# gpg keys listed at https://github.com/nodejs/node
RUN set -ex \
  && for key in \
    9554F04D7259F04124DE6B476D5A82AC7E37093B \
    94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
    0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
    FD3A5288F042B6850C66B31F09FE44734EB7990E \
    71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
    DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
    B9AE9905FFD7803F25714661B63B535A4C206CA9 \
    C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
  ; do \
    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
  done

ENV NPM_CONFIG_LOGLEVEL info
ENV NODE_VERSION 6.2.2

RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
  && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
  && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
  && grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
  && tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
  && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt

CMD [ "node" ]

答案 1 :(得分:1)

这2张图片之间的区别在于,第一张,如你所说拉ubuntu图片并安装节点。第二个假设是一个图像,其中包含运行已安装节点的所有必要事项。当然节点:4.4.7图像使用ubuntu图像。但是这个想法是为你所做的每一个特定任务使用一个特定的图像,这样下载的图像就更轻,如果节点图像发生变化,你只能下载这个部分,而不是下载ubuntu图像。此外,如果你有另一个使用ubuntu的图像,例如java,grails,python等...你可以维护ubuntu图像而不需要更改,并为每种技术保留特定的图像。 原因是所有这些特定的图像都在不断改进,你不需要改变你的dockerfiles只需拉动并使用它。

答案 2 :(得分:1)

这不是真的一样。 通过查看节点:4.4.7的Dockerfile here,您可以看到节点映像基于debian jessie映像,其中安装了多个构建包。 在该节点映像中,它从官方站点获取4.4.7 nodejs targz,而使用apt-get,您将无法获得相同的版本。这取决于您在系统中添加的节点仓库