Pull to refresh

Comments 13

А если применить multi-stage build? Один образ Alpine для компиляции зависимостей, другой для рантайма. Конечно, это ещё больше возни, чем предложенный вариант, но экономия места всё же будет.

Согласен, ничто не мешает использовать данный способ. Но в данных примерах (официальные сборки Alpine 3.7 для Python 3.6) вычищают все установленные и временные зависимости. Поэтому цель была сравнить пустой Python и дополненный пакетами.

А почему вы не удаляете из сборки *-dev пактеы, которые ненужны после компиляции?


Сам делаю вот так: разбиваю пакеты на две группы. перечисленные в dev удаляю после установки pip -r


RUN apk update && \\
cat /opt/app/requirements/apk.txt | xargs apk add  --no-cache && \\
cat /opt/app/requirements/apk_dev.txt | xargs apk add  --no-cache && \\
python3 -m pip install -r /opt/app/requirements/python-requirements.txt && \\
cat /opt/app/requirements/apk_dev.txt | xargs apk del

Удаление тяжелых тяжелых пакетов типа mariadb-dev сильно экономит место и заметно ускоряет деплой.

Именно так, как вы написали и происходит: установка сборочных инструментариев, сборка, удаление сборочных инструментариев.
 apk add --no-cache --virtual .build-deps
....
 apk del .build-deps 

А Вы уверены что "apk del .build-deps" удаляет и фактически освобождает место? У меня возникли сомнения потому, что докер использует overlayfs2 за которым стоит union mount. https://docs.docker.com/glossary/?term=overlay%20storage%20driver
То есть нужно точно знать что все действия развертыванию, компиляции с её временными файлами, деплою и удалению инструментария происходят в одном и том же обязательно последнем слое фс.
В противном случае никакого фактического освобождения места может не оказаться.

У Debian есть slim сборка, в которой вырезаны лишние зависимости и утилиты. Аналогичные сборки есть у дистрибутивов на основе debian.
К примеру образ на alpine python:3.7-rc-alpine весит 94,5Мб, а образ на debian 9 slim python:3.7-rc-slim всего 143Мб, что не многим больше.

Ну в принципе вы не открыли Америку. Если много зависимостей, то Альпайн — это ещё та заноза!

Список зависимостей внушает. Страшно представить сколько пришлось все это собирать.

На тему размера — приятно, конечно, иметь образ поменьше, но во всем нужен баланс: если посчитать стоимость времени инженера и стоимость стораджа — может оказаться, что и фиг с ним, с местом.
Там подготовлены образы для виртуальных машин различных серверных окружений, но файла или образа докера я не нашёл.
The 29MB Docker image for Minimal Ubuntu 18.04 LTS serves as a highly efficient container starting point, and allows developers to deploy multicloud containerized applications faster. For modern Docker workflows with Kubernetes, the minimal Ubuntu image provides a balance of compatibility, familiarity, performance and size. This is the standard Ubuntu 18.04 LTS image on the Docker Hub.

Cloud images also contain the optimised kernel for each cloud and supporting boot utilities.
Только что попробовал;)
$ docker pull ubuntu:18.04
Trying to pull repository docker.io/library/ubuntu ... 
sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d: Pulling from docker.io/library/ubuntu
6b98dfc16071: Pull complete 
4001a1209541: Pull complete 
6319fc68c576: Pull complete 
b24603670dc3: Pull complete 
97f170c87c6f: Pull complete 
Digest: sha256:5f4bdc3467537cbbe563e80db2c3ec95d548a9145d64453b06939c4592d67b6d
Status: Downloaded newer image for docker.io/ubuntu:18.04
[fedora@atomic-3 ~]$ docker images --all
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               113a43faa138        4 weeks ago         81.2 MB


Что не похоже на то, что свежий образ)
Sign up to leave a comment.

Articles