为什么Docker在安装NodeJS的时候下载这么多?

Ser*_*rov 1 node.js docker

我有一个简单的Dockerfile

FROM node:4.2.2
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)

当我运行时docker build -t myapp .,它会显示下载内容的大小:

使用 Docker 安装 NodeJS

尽管 NodeJS 本身不大于 30Mb,但它似乎大于 200Mb。正在下载的其他东西是什么?

Hen*_*gel 5

Docker 将安装比应用程序本身更多的东西,因为 Docker 是一个容器解决方案,而不是像 apt 或 rpm 这样的包管理器。Docker 应该与 Xen、VMWare 或 VirtualBox 等全系统虚拟化进行比较。来自 Docker 文档:

Docker 允许您将应用程序及其所有依赖项打包到一个用于软件开发的标准化单元中。

Docker 容器将一个软件封装在一个完整的文件系统中,该文件系统包含它运行所需的一切:代码、运行时、系统工具、系统库——任何你可以安装在服务器上的东西。这保证了它总是以相同的方式运行,无论它在什么环境中运行。 source

FROM node:4.2.2例如,将部署一个基于 Debian wheezy 的 docker 容器,它为您提供基本的 Debian 环境。并且为了让您知道 Docker 需要安装的不仅仅是 nodejs。

如果您想知道确切安装了什么,您需要查找包含在 Dockerfile 中的 Dockerfile。在这种情况下node:4.2.2。这是github 仓库。您可以在那里看到包含另一个 Dockercontainer buildpack-deps:wheezy。如果您查看该Dockerfile,您可以看到这些软件包已安装:

    autoconf \
    automake \
    bzip2 \
    file \
    g++ \
    gcc \
    imagemagick \
    libbz2-dev \
    libc6-dev \
    libcurl4-openssl-dev \
    libevent-dev \
    libffi-dev \
    libgeoip-dev \
    libglib2.0-dev \
    libjpeg-dev \
    liblzma-dev \
    libmagickcore-dev \
    libmagickwand-dev \
    libmysqlclient-dev \
    libncurses-dev \
    libpng-dev \
    libpq-dev \
    libreadline-dev \
    libsqlite3-dev \
    libssl-dev \
    libtool \
    libwebp-dev \
    libxml2-dev \
    libxslt-dev \
    libyaml-dev \
    make \
    patch \
    xz-utils \
    zlib1g-dev \
Run Code Online (Sandbox Code Playgroud)