paint-brush
Как сбросить фунты с вашего образа Docker?к@infinity
2,203 чтения
2,203 чтения

Как сбросить фунты с вашего образа Docker?

к Rishabh Agarwal4m2024/01/19
Read on Terminal Reader
Read this story w/o Javascript

Слишком долго; Читать

Контейнеризация — это процесс развертывания программного обеспечения, при котором код приложения объединяется со всеми файлами и библиотеками, необходимыми для запуска в любой инфраструктуре. Оптимизируя образы Docker, вы можете ускорить общий цикл разработки, а также усилить меры безопасности, обеспечивая более надежную и эффективную программную среду.
featured image - Как сбросить фунты с вашего образа Docker?
Rishabh Agarwal HackerNoon profile picture

« Контейнеризация », — однозначно сказал мой менеджер, когда я спросил его о самом главном, что произвело революцию в индустрии разработки программного обеспечения. Он утверждал, что без контейнеризации быстрое масштабирование и глобальное развертывание современного программного обеспечения было бы гораздо более сложной задачей. Примечательно отметить, что почти все используемое сегодня программное обеспечение использует контейнеризацию в различных возможностях, что подчеркивает ее незаменимую роль в обеспечении работы современной экосистемы программного обеспечения!


Для тех из вас, кто не знает, вот определение с сайта 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 более эффективно использовать свою систему кэширования. Например, поскольку исходный код часто претерпевает частые изменения, рекомендуется скопировать его в образ ближе к концу процесса.


Кэш изображений ~ https://cloud.google.com/architecture/best-practices-for-building-containers


Хотя это и не делает ваши изображения легче, зато ускоряет процесс сборки!

Удалите ненужные инструменты

Зачастую образы контейнеров содержат ненужные инструменты, что приводит к раздуванию образа и потенциальным уязвимостям безопасности. Например, такие инструменты, как netcat могут быть использованы хакерами для выполнения вредоносных действий внутри вашего контейнера, если они получат несанкционированный доступ.


Строгое соблюдение набора инструментов и библиотек, поставляемых с вашим образом контейнера, может значительно помочь снизить угрозы безопасности, а также приведет к уменьшению размеров образов. Изображения меньшего размера загружаются быстрее, а это значит, что контейнер запускается быстрее.

Используйте наименьшее базовое изображение

Изображение, на которое мы ссылаемся в инструкции FROM, называется базовым изображением. Базовое изображение во многом определяет размер создаваемого окончательного изображения. Мы должны попытаться использовать как можно меньшее базовое изображение, чтобы уменьшить окончательный размер нашего изображения.


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


Даже если небольшое изображение не содержит всех необходимых инструментов, его использование все равно может быть лучшим вариантом. Установка необходимых вам пакетов поверх более легкого базового образа все равно может обеспечить экономию по сравнению с использованием более тяжелого образа.

Копируйте только то, что необходимо!

При копировании исходного кода многие нежелательные файлы и папки также могут быть скопированы. Это увеличивает размер вашего изображения и в конечном итоге приводит к его раздуванию. Постарайтесь свести к минимуму количество копируемых файлов и свести их к минимуму.


В нашей отрасли часто упускают из виду важность оптимизации образов контейнеров и внедрения лучших практик. Однако существенные выгоды, которые возникают в результате соблюдения этих практик, невозможно переоценить. Разработчикам очень важно постоянно уделять приоритетное внимание созданию компактных и быстрых образов контейнеров.


На этом мы подошли к концу этой статьи. Надеюсь, вам понравилось это читать!