Назад | Перейти на главную страницу

Почему Docker так много загружается при установке NodeJS?

У меня простой Dockerfile:

FROM node:4.2.2
EXPOSE 8000

Когда я бегу docker build -t myapp ., он показывает размер загруженного материала:

Кажется, что это больше 200 МБ, хотя сам NodeJS не превышает 30 МБ. Что еще загружается?

Docker установит гораздо больше, чем само приложение, потому что Docker - это контейнерное решение, а не менеджер пакетов, такой как apt или rpm. Docker следует сравнить с виртуализацией всей системы, такой как Xen, VMWare или VirtualBox. Из документации Docker:

Docker позволяет упаковать приложение со всеми его зависимостями в стандартизированный модуль для разработки программного обеспечения.

Контейнеры Docker включают часть программного обеспечения в полную файловую систему, содержащую все необходимое для запуска: код, среду выполнения, системные инструменты, системные библиотеки - все, что вы можете установить на сервере. Это гарантирует, что он всегда будет работать одинаково, независимо от среды, в которой он работает. источник

FROM node:4.2.2 например, развернет контейнер докеров на основе Debian wheezy, который предоставляет вам базовую среду 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 \

Каждый образ контейнера построен по слоям; если ты бежишь

docker history myapp

вы увидите размер каждого слоя; как говорит другой ответ, большая часть этого, вероятно, находится в debian слой.