Как сбросить фунты с вашего образа Docker?
20 января 2024 г.«Контейнеризация», – однозначно сказал мой менеджер, когда я спросил его о самом главном, что произвело революцию в индустрии разработки программного обеспечения. Он утверждал, что без контейнеризации быстрое масштабирование и глобальное развертывание современного программного обеспечения было бы гораздо более сложной задачей. Примечательно, что почти все используемое сегодня программное обеспечение использует контейнеризацию в различных возможностях, что подчеркивает ее незаменимую роль в функционировании современной экосистемы программного обеспечения!
:::совет Для тех из вас, кто не знает, вот определение с веб-сайта AWS ~
*“Containerisation is a software deployment process that bundles an application’s code with all the files and libraries it needs to run on any infrastructure. Traditionally, to run any application on your computer, you had to install the version that matched your machine’s operating system.”*
:::
Изображения служат строительными блоками для контейнеров, подобно чертежам, направляющим их создание. Таким образом, поддержка облегченных и оптимизированных образов контейнеров ускоряет процесс развертывания и облегчает распространение этих образов. Оптимизируя образы Docker, вы не только можете ускорить общий цикл разработки, но и усилить меры безопасности, обеспечивая более надежную и эффективную программную среду.
В этой статье мы рассмотрим различные методы создания эффективных образов Docker, что в конечном итоге повысит эффективность вашего приложения.
Упаковка одного приложения в контейнер
Распространенной ошибкой является рассматривать контейнер как виртуальную машину (ВМ) и упаковывать более одного приложения в один контейнер. Помимо увеличения размера контейнера, у этой практики есть и другие недостатки.
Предполагается, что срок службы контейнера тесно связан с приложением, которое он запускает. Контейнер должен запускаться при запуске приложения и останавливаться после его завершения. Решения для оркестрации контейнеров, такие как Docker и Kubernetes, в значительной степени полагаются на этот атрибут контейнеров. Если в контейнере запущено много приложений, инструменты оркестрации не смогут идентифицировать и перезапустить ваше приложение!
Разумное использование кэша
Изображения состоят из слоев, и каждая инструкция в вашем Dockerfile добавляет новый слой. Технологии контейнеризации, такие как Docker, будут пытаться повторно использовать слои предыдущих сборок, где это возможно, чтобы сократить время сборки. Кэш слоя можно использовать только в том случае, если ни один из нижележащих слоев не изменился с момента предыдущих сборок.
Чтобы повысить скорость создания образа, полезно разместить инструкции, которые могут часто меняться, ниже в вашем Dockerfile. Такой подход позволяет Docker более эффективно использовать свою систему кэширования. Например, поскольку исходный код часто подвергается частым изменениям, рекомендуется скопировать его в образ ближе к концу процесса.
Хотя это не делает ваши изображения легче, но ускоряет процесс сборки!
Удалите ненужные инструменты
Часто образы контейнеров содержат ненужные инструменты, что приводит к раздуванию образа и потенциальным уязвимостям безопасности. Например, такие инструменты, как netcat
, могут быть использованы хакерами для выполнения вредоносных действий внутри вашего контейнера, если они получат несанкционированный доступ.
Строгое соблюдение набора инструментов и библиотек, поставляемых с вашим образом контейнера, может значительно помочь снизить угрозы безопасности, а также приведет к уменьшению размеров образов. Изображения меньшего размера загружаются быстрее, а значит, контейнер запускается быстрее.
Используйте самое маленькое базовое изображение
Образ, на который мы ссылаемся в инструкции FROM, называется базовым образом. Базовое изображение во многом определяет размер создаваемого окончательного изображения. Мы должны постараться использовать как можно меньшее базовое изображение, чтобы уменьшить окончательный размер нашего изображения.
:::совет Старайтесь использовать альпийские изображения везде, где это возможно, поскольку они меньше по размеру и зачастую содержат достаточно инструментов для поддержки деятельности по разработке.
:::
Даже если небольшое изображение не содержит всех необходимых инструментов, его использование все равно может быть лучшим вариантом. Установка необходимых вам пакетов поверх более легкого базового образа все равно может обеспечить экономию по сравнению с использованием более тяжелого образа.
Копируйте только то, что необходимо!
При копировании исходного кода многие ненужные файлы и папки также могут быть скопированы. Это увеличивает размер вашего изображения и в конечном итоге приводит к его раздуванию. Постарайтесь свести к минимуму количество копируемых файлов и свести их к минимуму.
В нашей отрасли часто упускают из виду важность оптимизации образов контейнеров и внедрения лучших практик. Однако существенные выгоды, которые возникают в результате соблюдения этих практик, невозможно переоценить. Разработчикам очень важно постоянно уделять приоритетное внимание созданию компактных и быстрых образов контейнеров.
На этом мы подошли к концу этой статьи. Надеюсь, вам понравилось читать!
Оригинал