docker - 用于运行 nodejs 应用程序的 2 种 Dockerfile 之间的区别

标签 docker

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

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


FROM node:4.4.7

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

最佳答案

hub.docker.com 上的节点包包括他们的 Dockerfile。它基于 Debian Jessie 环境,并从其他镜像中引入多个构建工具:

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" ]

您可以随时查看 docker history有问题的图像以查看有关其来源的更多详细信息,但这并没有提供有关从添加和复制到图像中的内容的详细信息,这通常是创建基本图像的方式:
$ docker history node:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
a6b9ffdcf522        5 weeks ago         /bin/sh -c #(nop) CMD ["node"]                  0 B                 
<missing>           5 weeks ago         /bin/sh -c curl -SLO "https://nodejs.org/dist   41.51 MB            
<missing>           5 weeks ago         /bin/sh -c #(nop) ENV NODE_VERSION=6.2.0        0 B                 
<missing>           5 weeks ago         /bin/sh -c #(nop) ENV NPM_CONFIG_LOGLEVEL=inf   0 B                 
<missing>           5 weeks ago         /bin/sh -c set -ex   && for key in     9554F0   78.62 kB            
<missing>           5 weeks ago         /bin/sh -c apt-get update && apt-get install    317.9 MB            
<missing>           5 weeks ago         /bin/sh -c apt-get update && apt-get install    122.6 MB            
<missing>           5 weeks ago         /bin/sh -c apt-get update && apt-get install    44.3 MB             
<missing>           5 weeks ago         /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                 
<missing>           5 weeks ago         /bin/sh -c #(nop) ADD file:5d8521419ad6cfb695   125.1 MB       

关于docker - 用于运行 nodejs 应用程序的 2 种 Dockerfile 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38184676/

相关文章:

docker - 如何在 python docker sdk 中使用 exec_run 来替换我的 docker cli 命令

linux - 如何在 Docker 中使用重定向

docker - AWS上的docker-machine ssh

nginx - Docker - 运行 nginx 作为 Redmine 的代理

docker - Docker可以将多个容器端口映射到一个主机端口吗?

docker - Docker不显示写在/dev/stdout中的日志

docker - 从Docker容器连接到主机套接字

php - 将bin文件复制到docker容器会导致错误

mongodb - Mongo连接被拒绝ECONNREFUSED

ssl - Windows Server 2016 TP3 上为 Docker 存储的 TLS 证书在哪里