Поможет ли Docker в качестве компрессора высокого уровня? - PullRequest
0 голосов
/ 03 января 2019

У меня есть пакет размером около 2 + ГБ в машине с Ubuntu. Я создал образ Docker из файла Docker, и его размер составляет около 86 МБ. Теперь я создал другой образ, обновив файл докера с помощью команды copy, которая копирует пакет на компьютере с Ubuntu в образ докера при создании нового образа докера.

Теперь я вижу, что размер образа докера составляет около 2 ГБ, поскольку образ докера также содержит пакет. Я хочу знать, помогает ли это явление докера в любом случае уменьшить размер пакета после создания образа докера.

Я хочу, чтобы образ докера создавался таким образом, чтобы он также содержал пакет размером около 2 ГБ, но я не хочу, чтобы размер изображения докера превышал 200 МБ.

С уважением, Картик

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Как упомянул Дэвид, невозможно использовать докер, который использует оверлей или что-то подобное многоуровневое представление FS.

Но есть обходной путь для сохранения размера изображения низким (но размер контейнера будет большим !!), но это увеличит время запуска приложения из контейнера докера, также может добавитьнекоторые сложности с аргументами, которые вы передаете в приложение.Возможный способ уменьшить размер:

  • сжать пакет перед добавлением
  • скопировать сжатый при создании изображения
  • использовать какой-либо скрипт в качестве ENTRYPOINT / CMD независимо отвы используете для запуска контейнера, который должен выполнить
    • распаковку [вам понадобится пакет распаковки, установленный в контейнере] и
    • для запуска приложения (вы можете повторно использовать аргументы, полученные при запуске Dockerкак $ @ при передаче в приложение - или даже предварительно проверьте аргументы)

Проверьте, сжав файл пакета с помощью gzip / 7zip / bzip2 или любого другого компрессора по вашему выбору -все, чтобы увидеть выходной файл имеет уменьшенный размер.

Если он не может быть сжат достаточно

0 голосов
/ 03 января 2019

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

В то время как Docker использует некоторые умные и сложные механизмы ядра, в большинстве случаев файл в контейнере отображается в обычный файл на диске в странной структуре файловой системы. Если вы пытаетесь установить в образ пакет размером 2 ГБ, ему потребуется 2 ГБ на локальном диске. Существуют некоторые механизмы для обмена данными, которые могут помочь снизить общее использование диска (если вы запускаете 10 контейнеров на основе этого образа, они будут совместно использовать базовый образ объемом 2 ГБ и не будут использовать дополнительное дисковое пространство), но не будут иметь встроенного сжатия.

Еще одно замечание: после того, как вы предприняли действие в Dockerfile, чтобы использовать пробел в какой-либо форме, он используется постоянно. Каждая строка в Dockerfile создает новый «слой» или отдельное изображение, которое записывает изменения от предыдущего слоя. Если вы пытаетесь установить пакет, которого нет в каком-либо репозитории, вы застряли с использованием его пространства в образе, если только вы не можете использовать для него многоэтапные сборки:

FROM ubuntu:18.04
COPY package.deb .
# At this point there is a layer containing the .deb file and
# it uses space in the final image.
RUN dpkg --install package.deb && rm package.deb
# The file isn't "in the image", but the image remembers adding it
# and then removing it, so it still uses space.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...