答案1
Docker 会安装比应用程序本身更多的内容,因为 Docker 是一个容器解决方案,而不是像 apt 或 rpm 这样的包管理器。Docker 应该与 Xen、VMWare 或 VirtualBox 等全系统虚拟化进行比较。摘自 Docker 文档:
Docker 允许您将应用程序及其所有依赖项打包成标准化单元,以进行软件开发。
Docker 容器将软件包装在一个完整的文件系统中,其中包含运行所需的一切:代码、运行时、系统工具、系统库 - 您可以在服务器上安装的所有内容。这保证了无论在什么环境中运行,它始终以相同的方式运行。 来源
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 \
答案2
每个容器镜像都是分层构建的;如果你运行
docker history myapp
您将看到每一层的大小;正如另一个答案所说,其中的大部分可能位于层中debian
。