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

我有一个简单的Dockerfile

 FROM node:4.2.2 EXPOSE 8000 

当我运行docker build -t myapp . ,它显示下载的东西的大小:

NodeJS与Docker一起安装

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

Docker将比应用程序本身安装更多,因为Docker是一个容器解决scheme,而不是像apt或rpm这样的软件包pipe理器。 Docker应与Xen,VMWare或VirtualBox等全系统虚拟化进行比较。 从Docker文档:

Docker允许你将一个具有所有依赖的应用打包成一个标准化的软件开发单元。

Docker容器在一个完整的文件系统中包含了一个软件,它包含了运行所需的所有东西:代码,运行时,系统工具,系统库 – 任何你可以在服务器上安装的东西。 这可以保证它始终运行相同,无论它运行在什么环境

FROM node:4.2.2例如FROM node:4.2.2将部署一个基于Debian wheezy的Docker容器,它给你一个基本的Debian环境。 并且为了给你,Docker需要安装比nodejs更多的东西。

如果你想知道什么是安装的,你需要查看Dockerfile中包含的Docker文件。 在这种情况下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 \ 

每个容器图像分层构build; 如果你跑

 docker history myapp 

你会看到每一层的大小; 另一个答案说,它的大部分可能是在debian层。