Производственные готовые контейнеры (2 части серии)
Создание продуктивных контейнеров для использования в коммерческих приложений может быть далеко от «Начнитесь с Node.js и Docker» -Type из учебных пособий, которые распространены в Интернете. Эти руководства великолепны для введения всех преимуществ контейнеров докеров в современном облачном развитии, но создавая контейнер, который проходит собрание в масштабном применении в производстве, является другая история.
Для продуктивных контейнеров есть три ключевых вещей, которые вы хотите оптимизировать при создании контейнера:
- Размер изображения 📦.
- Скорость сборки 🐢.
- Безопасность 🔐.
Размер изображения и скорость сборки Убедитесь, что ваши контейнеры могут легко и эффективно перемещаться через CI/CD и тестировать трубопроводы. Безопасность, очевидно, имеет решающее значение в современной цепочке программного обеспечения, а контейнеры имеют свой собственный набор вопросов безопасности. К счастью, уменьшение размера изображения контейнера фактически может облегчить некоторые проблемы безопасности в контейнерах.
В моих основных условиях Я показал вам несколько легких техник для улучшения вашего Dockerfile Использование образца «Hello World» Node.js приложение.
Создание продуктивных контейнеров — Основы
Мартин Wimpress · 3 июня · 6 мин прочитаны
Эти основы касаются всех трех оптимаций, хотя они только царапают поверхность.
Давайте посмотрим на некоторые более продвинутые методы для оптимизации контейнера.
Опрявившиеся читатели, которые доверяют это до конца статьи, разблокируют бонус! 🎁
Альпийские изображения
Самое первое, что вы столкнетесь при поиске техники для создания меньших контейнеров Alpine Linux Отказ Alpine Linux — это проект с открытым исходным кодом, целью которого является создание голых костей 🦴 версии Linux, которая позволяет разработчикам «построить с нуля».
Плюсы: переход к альпину может быть легким способом получить меньший контейнер
Уменьшение размера изображения с альпином может быть невероятно простым — в соответствии с правильными обстоятельствами. Для некоторых приложений так же просто, как изменение базового изображения в вашем Dockerfile :
ОТ
FROM node:16.2.0
К
FROM node:16.2.0-alpine
Когда мы строим новое изображение, мы видим, что старое изображение было 856 МБ, а новый — 114 МБ 🎉
REPOSITORY TAG IMAGE ID CREATED SIZE cotw-node-alpine latest 2cc7b4a7b09c 2 minutes ago 114MB cotw-node latest 873fb9fca53a 3 days ago 856MB
Легко, верно? Не так быстро.
Минусы: использование альпийских изображений может привести к проблемам создания проблем, сейчас и в будущем
Есть несколько не очень очевидных Gotchas с использованием альпийских изображений, которые не освоят в нашем Super Simple пример пример, например:
Вы должны установить все
Эти крошечные базовые изображения должны пожертвовать что-то, верно? Альпийские пользователи будут устанавливать все, что им нужно, вплоть до данных или инструментов разработки часового пояса. Вам не понадобится ваши инструменты разработки для вашего производственного изображения, скорее всего, но для большинства разработчиков мысли об сервере без скручивание или погибший это мост слишком далеко.
Различные компиляторы и менеджеры пакетов
Вы также будете устанавливать любые зависимости с помощью Alpine Package Tool Tool ( APK ) вместо более знакомых APT или обороты . Различия небольшие, но могут отключить ничего не подозревающих разработчиков.
Меньше примеров; Меньше документации
Наконец, в то время как Alpine был рядом с девятью плюс годы, и, вероятно, всегда будет меньше и более специализированная пользовательская база, чем установленные распределения Linux, такие как Ubuntu и Debian. Уит, во время этого написания альпийский Тег на Stackoverflow имеет только 1,280 вопросов по сравнению с Более 54 000 для Ubuntu Отказ
Многоступенчатые сборки
Следующая тактика, которую вы, вероятно, столкнулись с поиском способов уменьшения размеров докера, являются многоступенчатые 🏗 сборки. Эта тактика, Рекомендуется докером и многими в Соблебском сообществе , по сути, построено изображение дважды. Первый набор команд создает ваше базовое изображение приложения, все включены. Второй набор команд создает изображение от этого базового изображения, принимая только то, что нужно и оставляют ничего, что нет.
С многоступенчатой сборкой, нашими Dockerfile будет выглядеть так. Обратите внимание на два От заявления. Первый создает изображение приложения; Второе копирует необходимые файлы из этого образа во вторую, более готовую к производственной версии.
FROM node:16.2.0-alpine as builder WORKDIR /usr/src/app COPY package*.json ./ RUN npm ci COPY app.js ./ FROM node:16.2.0-alpine WORKDIR /usr/src/app COPY --from=builder /usr/src/app . EXPOSE 3000 USER node CMD ["node","app.js"]
Плюсы: dev и prod изображения могут быть построены отдельно
В сочетании с Docker Compose Этот подход дает разработчикам гибкую среду разработки при одновременном сокращении раздува в производственных изображениях. Вы можете просто использовать свое начальное изображение для Dev/Test и окончательную версию для производства. Многоступенчатые сборки работают особенно хорошо для контейнеров GO, значительно снижают размер изображения, но также хорошо работают для статического Node.js и приложений реагирования.
Минусы: добавлена сложность; Особенности использования
Многоэтапные сборки все еще относительно новые 🌱 на сцене. Для большинства разработчиков все еще новые для контейнеров, зная, что скопировать на окончательное производственное изображение и что оставить позади, является основным барьером для въезда. Кроме того, этот шаблон может столкнуться с проблемами.
Поскольку мы уже используем альпийское изображение, экономия размера относительно незначительно для нашего примера «Hello World». Вы ожидаете увидеть большие выгоды в полноценном реакции или VUE-приложении.
REPOSITORY TAG IMAGE ID CREATED SIZE cotw-node-multistage latest 52bc33d14a87 3 minutes ago 114MB cotw-node-alpine latest 2cc7b4a7b09c 4 days ago 114MB cotw-node latest 873fb9fca53a 7 days ago 856MB
Инструменты развития и отрывной
Есть несколько инструментов — и новые, возникающие каждый день — которые смотрят на обход или автоматизировать Dockerfile Авторинг сделать создание изображения проще. Buildpacks являются наиболее зрелыми из этих технологий, и могут быть использованы через такие инструменты, как Пакет или Путевая точка Отказ
Есть варианты строительства из нескольких источников — Heroku, Google и Paketo — это обычные фавориты — и каждый дает вам немного разный опыт разработчика и окончательное изображение при использовании.
$ pack build cotw-node-bp-google --builder gcr.io/buildpacks/builder:v1 $ pack build cotw-node-bp-heroku --builder heroku/buildpacks:18 $ pack build cotw-node-bp-pb-base --builder paketobuildpacks/builder:base $ pack build cotw-node-bp-pb-full --builder paketobuildpacks/builder:full
Плюсы: когда они работают, они работают
В определенных случаях Buildpacks может принять боль из Dockerfile Авторинг и просто создавать контейнерные изображения вашего приложения без суеты. Пакетный инструмент ищет «подобные приложения» файлы в исходном каталоге, и автоматически выясняет, какое приложение есть и как его контейнеризировать. В случае нашего образца узла, он видит package.json И правильно предполагает, что у нас есть приложение Node.js.
Минусы: когда они не …
Учитывая относительную новинку такого подхода для контейнеров докеров, есть много gogchas с buildpacks. Нестандартные приложения или операционные системы могут быть борются, и у нас были проблемы успешно проимены на новом кремниевом MacBook Pro. Полученные изображения много варьируются — мы увидели диапазон 200 МБ до 800 МБ в наших примерах — и результаты, как правило, ниже, чем вы получите с другими методами.
Автоматизировать его с Dockerslim
Dockerslim Проект с открытым исходным кодом был создан Стройный. Ай CТО Кайл Квест В 2015 году как способ автоматизации оптимизации контейнера.
Docker-Slim/Docker-Slim
Dockerslim (Docker-Slim): Не изменяйте ничего в своем образе контейнера Docker и домируйте его до 30x (а для скомпилированных языков еще больше), что делает его тоже! (свободный и открытый источник)
Не изменяйте ничего в своем изображении Docker Container и домируйте его до 30x, что делает его безопасным! Оптимизация изображений — это не единственное, что он может сделать, хотя. Это также может помочь вам понять и автор лучших контейнеров.
Продолжай делать то, что вы делаете. Не нужно ничего менять. Используйте базовое изображение, которое вы хотите. Используйте управляющий пакет, который вы хотите. Не беспокойтесь о руке, оптимизируя вашу докерафиль. Вам не нужно выбросить ваши инструменты и ваш рабочий процесс, чтобы иметь небольшие контейнерные изображения.
Не беспокойтесь о том, чтобы вручную создавать профили безопасности Seccomp и Apparmor. Вам не следует стать экспертом в SESCalls Linux, Seccomp и Apparmor, чтобы иметь безопасные контейнеры. Даже если вы знаете достаточно об этом, тратите время обратного проектирования вашего приложения поведение …
Просто скачайте и запустите Docker-Slim Build И Dockerslim рассмотрит изображение, восстановит его только с необходимыми зависимостями, и дают вам новое изображение, которое может быть запущено как оригинал.
Плюсы: это автоматическое
Dockerslim означает, что вы можете работать с любым базовым изображением, который вы хотели бы (сказать, Ubuntu или Debian) и позвольте Dockerslim беспокоиться о удалении ненужных инструментов и файлов по пути к производству. Лучшая часть заключается в том, что Dockerslim может быть использован рядом с любыми из этих других методов. После протестированного, он может быть интегрирован в ваш CI/CD-трубопровод для автоматического заминирования контейнеров, а уменьшение размера приводит к более быстрому времени сборки и лучшей безопасности.
Минусы: крутая кривая обучения
Как и в случае любого программного обеспечения с открытым исходным кодом, Dockerslim может занять некоторое время для работы, особенно для нетривиальных приложений. Он лучше всего работает для веб-стилей, микросервисов и API, которые определили порты HTTP/HTTPS, которые датчик может найти и использовать для наблюдения за внутренними контейнерами.
Для достижения наилучших результатов провести некоторое время, чтобы узнать различные командные флаги, доступные для настройки вашего изображения, и Посмотрите на примеры для любых кадров, которые вы используете Отказ
Docker-Slim/Примеры
Ракифицированные примеры приложений с различными языками и стеками для Dockerslim
Соединение с докерскими
Есть Активные Dockerslim Viscord Channel Полный экспертов, которые могут помочь вам проблемы со стороны сортировки, когда они возникают.
Следуйте за я здесь на dev.to , Slimdevops Twitch 📡 канал и Slimdevops YouTube 📺 Канал Где я буду делать более глубокие погружения в контейнерную оптимизацию, используя Dockerslim и Slim. Платформа AI в будущих постах и живых потоках.
Эксклюзивный тонкий. AI ранний доступ
И, если вы доберетесь до конца этой статьи, дорогой читатель, то вот бонус для вас; Ранний доступ пригласить в тонкую. AI Private Beta 🙂.
- Image Credit: Доминик Люкманн
Производственные готовые контейнеры (2 части серии)
Оригинал: «https://dev.to/wimpress/creating-production-ready-containers-advanced-techniques-4jm3»