Большой размер изображения python в Docker

Я хочу протестировать свое приложение с помощью Docker. Итак, у меня это в Dockerfile:

FROM python:3-onbuild
CMD [ "python", "./test.py" ]

test.py:

print(123)

Затем я запускаю:

docker build -t my_test_app .

Итак, у меня есть одно большое изображение. docker images return:

REPOSITORY          TAG                 IMAGE ID        CREATED    VIRTUAL SIZE
python              3-onbuild           b258eb0a5195    8 days ago 757 MB

Почему размер файла такой большой?

Является ли этот размер нормальным?

Ответ 1

Я только что проверил на своей машине стандартный ubuntu: надежное изображение - 188 МБ, а изображение со всеми материалами python - 480 МБ. Я вижу 800MB изображения довольно часто, обычно это те, которые содержат какое-то значимое приложение.

Однако эти образы основаны на наших частных изображениях, официальное изображение библиотеки Docker кажется намного большим по какой-то причине. Они осознают этот факт и пытаются его уменьшить. Посмотрите на обсуждение темы здесь

Если вам нужно немного меньшее изображение, попробуйте этот "rouge8/pythons", он будет меньше на 100 МБ.

rouge8/pythons latest … 680.3 MB

Имейте в виду, что изображения докеров упорядочены как иерархическая структура слоев. Поэтому, если вы повторно используете одно и то же базовое изображение для многих контейнеров, размер, добавляемый каждым отдельным контейнером, довольно мал. Это будет только разница между базой плюс все, что вы добавили в конкретный контейнер.

Ответ 2

Alpine Linux - очень скудный дистрибутив, доступный для Docker. Без Python он составляет около 5 МБ. С Python я получаю изображения от 60 до 120 МБ. Следующий файл Dockerfile имеет изображение размером 110 МБ.

FROM alpine:3.4

RUN apk --update add \
      build-base python-dev \
      ca-certificates python \
      ttf-droid \
      py-pip \
      py-jinja2 \
      py-twisted \
      py-dateutil \
      py-tz \
      py-requests \
      py-pillow \
      py-rrd && \
    pip install --upgrade arrow \
                          pymongo \
                          websocket-client \
                          XlsxWriter && \
    apk del build-base python-dev && \
    rm -rf /var/cache/apk/* && \
    adduser -D -u 1001 noroot

USER noroot

CMD ["/bin/sh"]

Кроме того, он очень хорошо поддерживается.

Ответ 3

Вы можете попробовать версию python: {version} -alpine. Это намного меньше:

>> docker image ls |grep python
python    3.6-alpine     89.4 MB
python    3.6            689 MB
python    3.5            689 MB
python    3.5.2          687 MB
python    3.4            833 MB
python    2.7            676 MB

На момент написания статьи похоже, что официальное изображение поддерживает -alpine во всех версиях Python.

https://hub.docker.com/_/python/

Ответ 4

Они добавляют различные системные пакеты для таких вещей, как клиенты баз данных, манипуляции с файлами изображений и библиотеки анализа XML. Таким образом, нет дополнительной работы, которую пользователь должен выполнить, если они хотят установить пакеты Python для psycopg2, MySQLdb, Pillow или lxml. Добавление этих дополнительных пакетов означает, что изображение будет более толстым, и если вам не нужны эти пакеты, это будет пустой тратой пространства.

Они также не пытаются обрезать материал из установки Python, который не требуется, например, все стандартные каталоги тестовых кодов библиотеки. Даже файлы .pyc можно обрезать, чтобы экономить место без какого-либо реального эффекта, поскольку веб-приложение обычно загружается один раз в течение срока службы контейнера, поэтому наличие файлов .pyc на самом деле вам не очень помогает.

В качестве сравнения рассмотрим варианты "pythonX.Y-slim" и их размер. Существует не вариант onbuild для тонких изображений.

Вы также можете посмотреть мои собственные изображения Docker для Python с поддержкой Apache/mod_wsgi. Они обрезаются и опираются на дополнительные пакеты, устанавливаемые пользователем как сборные крючки, только если это необходимо. Для этих пользователей размер изображения Python 3.4 onbuild специально для приложения WSGI:

grahamdumpleton/mod-wsgi-docker python-3.4-onbuild ... 409.9 MB

Приведенный размер даже включает Apache и mod_wsgi, предоставляя вам полноценный WSGI-сервер с возможностями обработки статического содержимого файла и многое другое.

Если не запущено приложение WSGI, начните с базового образа.

Изображения докеры mod_wsgi можно найти по адресу:

Различные записи в блогах о том, как использовать эти изображения для приложений WSGI и построения изображений Docker для приложений Python и WSGI, можно найти, связавшись с описанием изображения на узле Docker. Также следите за моим блога в целом, поскольку я буду публиковать больше о Docker и Python со временем.

Ответ 5

Да, это нормальный размер. Изображение содержит образ операционной системы и различные пакеты, и поэтому размер.