Рубрики
Uncategorized

Docker и размеры изображений

Эта статья была первоначально размещена по адресу: https://www.codepantecodr.com/docker-and-image-sions.html on … Tagged с Docker, DevOps.

Эта статья была первоначально размещена по адресу: https://www.codependentcodr.com/docker-and-image-sizes.html 12 августа 2018 года

Так что это удивило меня. У меня был Dockerfile, который выглядел в основном так:

FROM alpine:latest

RUN apk add --no-cache --update \
    python3 nodejs-current-npm make git curl

RUN python3 -m ensurepip
RUN pip3 install --upgrade pip

RUN npm install -g markdownlint-cli

# needed for one of the packages in requirements.txt
RUN apk add --no-cache --update python3-dev gcc build-base

COPY requirements.txt /build/requirements.txt
RUN pip3 install -r /build/requirements.txt

Построение этого изображения привело к изображению, которое Docker Images сообщается как 379 МБ. Это немного большое Так что я хотел обрезать.

Поскольку эти пакеты установлены незадолго до копирования Требования.txt к изображению были только там, чтобы иметь возможность установить Пакет, у них нет причин оставаться на изображении. Круто, чтобы мы могли их сэкономить на размере изображения:

FROM alpine:latest

RUN apk add --no-cache --update \
    python3 nodejs-current-npm make git curl

RUN python3 -m ensurepip
RUN pip3 install --upgrade pip

RUN npm install -g markdownlint-cli

# needed for one of the packages in requirements.txt
RUN apk add --no-cache --update python3-dev gcc build-base

COPY requirements.txt /build/requirements.txt
RUN pip3 install -r /build/requirements.txt

# cleanup unneeded dependencies
RUN apk del python3-dev gcc build-base

Сладкое, и это привело к размеру изображения 381 МБ , экономия Отрицательный 2 МБ Анкет Подожди …. что?

Итак, я удалено Некоторые вещи и в итоге получили изображение, которое несколько МБ больше ? Как это работает?

И именно здесь, если мы хотим получить технику, мы начинаем говорить о том, как Docker использует слоистую файловую систему и как таковой (не совсем не похожий на GIT Repos) после того, как что -то добавляется в изображение, оно не может (или, по крайней мере, легко)) удалить.

Смотрите эту проблему, в которой упоминается то, о чем я говорю: https://github.com/gliderlabs/docker-alpine/issues/45

Так что же нам делать? Ну, мы комбинация операции в одну инструкцию Docker:

FROM alpine:latest

RUN apk add --no-cache --update \
    python3 nodejs-current-npm make git curl

RUN python3 -m ensurepip
RUN pip3 install --upgrade pip

RUN npm install -g markdownlint-cli

COPY requirements.txt /build/requirements.txt

RUN apk add --no-cache --update python3-dev gcc build-base && \
    pip3 install -r /build/requirements.txt && \
    apk del python3-dev gcc build-base

Поскольку добавление и удаление пакетов APK представляют собой инструкцию по одному Docker, они не надувают размер встроенного изображения (вы можете думать о слоях как «контрольно -пропускных пунктах» после каждой инструкции в dockerfile ).

С этим изменением размер изображения упал Значительно Анкет Сколько? Давайте позволим инструменту сообщить нам:

$ docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED              SIZE
someimage                    combineops          1744771da3fa        About a minute ago   216MB
someimage                    removepckgs         fc5877e2afad        4 minutes ago        381MB
someimage                    original            b6e5e43b22e0        5 minutes ago        379MB

То есть он упал с 379 МБ к 216 МБ Анкет Совсем не плохая экономия.

Это классический компромисс «время против пространства», хотя. Потому что мне пришлось переместить Требования.txt Создайте линию, это означает, что сборка этого изображения часто медленнее (из -за того, как работает кэш Docker, если я изменю файл Telect.txt.txt, тогда ему придется установить эти пакеты APK в любое время Требования.txt изменения). Тем не менее, я думаю, что экономия в космосе (40%+) того стоит.

Оригинал: «https://dev.to/pzelnip/docker-and-image-sizes-209a»