Рубрики
Без рубрики

Я Чу, Чу, выберите контейнер изображение, часть 3.

Руководство по выбору правого базового контейнера. Tagged с Docker, новичками, разработкой, Python.

Я Чу, Чу, выберите изображение контейнера (3 серии деталей)

В последних двух постах (часть 1 и часть 2) в этой серии мы рассмотрели, какие базовые изображения доступны нам в качестве разработчиков. Затем мы занялись скомпилированными языками с Голангом. Теперь в этом посте мы рассмотрим варианты, доступные нам, используя динамический язык. Прежде чем мы начнем, мы должны убрать что -то с дороги. Если вы следили за серией, мы говорили о базовом изображении Scratch. У меня есть некоторые плохие новости, если вы используете динамический язык, вы не сможете использовать царапину, поскольку вам нужна установленная среда выполнения, в отличие от составленных языков. Итак, в этом посте мы собираемся использовать полную ОС, Слим ОС и Альпийские изображения Linux.

Если вы хотите воспользоваться многоэтапными сборками с динамичным языком, это немного более нюансировано. Поскольку у нас не будет ни одного бинарного для копирования, говоря, что мы все еще можем использовать многоэтапные сборки. Python на самом деле довольно приятно использовать в многоэтапных сборках, поскольку он имеет Virtualenv который дает использование логического разделения зависимостей, которые нам нужно для запуска наше приложение. Чтобы использовать многоэтапную сборку, вы скопируете каталог VirtualENV из контейнера сборки до конечного изображения. Опять же, как и в примере Golang, приложение, которое мы используем, довольно легкое. Просто простой веб -сервер Python, размещающий статический HTML -файл. Если вы хотите просмотреть код, просто иди здесь .

Так, как упоминалось ранее, у нас есть три варианта с динамичным языком, поэтому мы начнем с полного изображения ОС.

FROM python:3.8.0a2-stretch as build

RUN python3 -m venv /web

COPY . /web

FROM python:3.8.0a2-stretch

COPY --from=build /web /web

WORKDIR /web

EXPOSE 8080

ENTRYPOINT [ "python", "web]

Как только мы строим наше базовое изображение с помощью Dockerfile выше, используя многоэтапные сборки, у нас будет изображение 945 МБ Таким образом, поскольку вы можете видеть, что динамические языковые контейнерные изображения намного больше, чем скомпилированные языки из -за необходимости времени выполнения. Теперь, помня из нашего первого поста, это изображение также содержит критические уязвимости. Итак, давайте перейдем к тонкому изображению, как посмотрим, сколько размера изображения мы можем сохранить.

FROM python:3.8.0a2-slim-stretch as build

RUN python3 -m venv /web

COPY . /web

FROM python:3.8.0a2-slim-stretch

COPY --from=build /web /web

WORKDIR /web

EXPOSE 8080

ENTRYPOINT [ "python", "web.py" ]

С помощью этой сборки с использованием Slim OS в качестве базового изображения мы получаем размер изображения 159 МБ Таким образом, как вы можете видеть, это огромная экономия в размере путем замены с полного изображения ОС на тонкую версию той же ОС. К сожалению, это изображение все еще поставляется с уязвимыми пакетами. Так что, если мы перенесем наше приложение в Alpine Linux, какие преимущества мы приносим?

FROM python:3.8.0a2-alpine3.9 as build

RUN python3 -m venv /web

COPY . /web

FROM python:3.8.0a2-alpine3.9

COPY --from=build /web /web

WORKDIR /web

EXPOSE 8080

ENTRYPOINT [ "python", "web.py" ]

Теперь переезд в Alpine Linux дал нам самый маленький размер изображения, входящий в 103 МБ без критических уязвимостей. Теперь мы кратко рассказали об этой проблеме в Часть 1 Анкет Alpine не использует глибк Вместо этого он использует Musl Libc Теперь это гораздо важнее для динамического языка, как если бы у вас были зависимости, которые зависят от глибк У вас могут быть проблемы с альпийским.

Если вы хотите посмотреть какой -либо из кода для этой серии сообщений, пожалуйста, посетите мой GitHub Page Анкет Для дальнейшего изучения контейнеров или Kubernetes проверить мой OSS Workshop Или вы всегда можете задать мне любой вопрос в Twitter @scottcoulton

Я Чу, Чу, выберите изображение контейнера (3 серии деталей)

Оригинал: “https://dev.to/scottyc/i-cho-cho-choose-you-container-image-part-3-5aj9”