Багатоетапні збірки Docker: як оптимізувати та зменшити розмір зображення Docker

Docker революціонізував спосіб розробки, доставки та запуску додатків. Однак, однією з поширених проблем, з якими стикаються розробники, є розмір образів Docker. Великі образи можуть повільно завантажуватися та займати більше місця на диску, що призводить до неефективності процесів розробки та розгортання. На щастя, багатоетапні збірки Docker допомагають створювати менші та ефективніші образи контейнерів з кращим кешуванням та підвищеною безпекою. Іншими словами, можна сказати, що багатоетапні збірки Docker ідеально підходять для тих, кому складно оптимізувати файли Dockerfiles, забезпечуючи при цьому їх зрозумілість і простоту управління.

У цій статті ми розглянемо деякі просунуті техніки, що виходять за межі базової практики передачі файлів між етапами збірки та виконання. Ці поради допоможуть вам повною мірою використати можливості багатоетапних збірок Docker. Якщо ви не знайомі з принципом роботи багатоетапних файлів Docker, рекомендуємо спочатку ознайомитися з вступним посібником.

ЩО ТАКЕ БАГАТОЕТАПНА ЗБОРКА DOCKER?

Щоб зрозуміти концепцію багатоетапної збірки Docker, спочатку слід дізнатися, що таке образ Docker. Образ Docker — це портативний пакет, що містить усі необхідні компоненти для запуску програми. Щоб створити образ Docker для програми, всі інструкції, зазначені в Dockerfiles, забезпечують швидке та надійне функціонування програмного забезпечення.

У багатоетапній збірці Docker ви можете використовувати кілька операторів FROM у файлі Dockerfile, кожен з яких починає новий етап збірки і, можливо, використовує інший базовий образ. Такий підхід дозволяє передавати артефакти з одного етапу на інший, виключаючи з кінцевого образу всі непотрібні компоненти.

ЧОМУ ВАРТО ВИКОРИСТОВУВАТИ БАГАТОЕТАПНУ КОМПІЛЯЦІЮ DOCKER?

Ось деякі переваги використання багатоетапної компіляції Docker:

Зменшений розмір образу контейнера:включаючи в кінцевий образ тільки необхідні компоненти, багатоетапні компіляції Docker допомагають усунути непотрібні файли та залежності, що призводить до зменшення розміру образу.

Підвищена безпека: Менший образ з меншою кількістю компонентів зменшує площу атаки, покращуючи загальну безпеку вашої програми.

Простіше обслуговування: Багатоетапні збірки Docker розділяють середовища збірки та виконання, що робить Dockerfiles простішими для розуміння та обслуговування.

ЯК ВИКОРИСТОВУВАТИ БАГАТОЕТАПНІ ЗБІРКИ DOCKER? (ПОСІБНИК КРОК ЗА КРОКОМ)

Давайте розглянемо, як створити Dockerfile за допомогою багатоетапних збірки Docker для простої програми React. Щоб створити багатоетапну збірку Docker, виконайте наступні кроки:

КРОК 1: СТВОРІТЬ ПРОГРАМУ REACT

Спочатку відкрийте vscode і створіть нову програму React, якщо вам ще потрібно її створити. Ви можете створити програму React за допомогою наведених нижче команд:

> npx create-react-app testapp

> cd testapp

КРОК 2: СТВОРІТЬ ФАЙЛ DOCKERFILE ДЛЯ

У кореневій папці вашої програми React створіть файл Dockerfile. У файл docker вставте наступний код:

# Use node:16-alpine image as a parent image

FROM node:16-alpine AS build

# Create app directory

WORKDIR /usr/src/app

# Copy package.json files to the working directory

COPY package*.json ./

# Install app dependencies

RUN npm install

# Copy the source files

COPY . .

# Build the React app for production

RUN npm run build

# Use nginx image as a parent image for serving the app

FROM nginx:alpine

# Copy built files from the previous stage to the nginx default directory

COPY --from=build /usr/src/app/build /usr/share/nginx/html

# Expose port 80 for serving the app

EXPOSE 80

# Command to start nginx

CMD ["nginx", "-g", "daemon off;"]

Dockerfile використовує багатоетапний процес побудови Docker. На початковому етапі будується додаток React, а на наступному етапі побудований додаток обслуговується за допомогою Nginx. На другому етапі команда COPY переносить вміст каталогу побудови з першого етапу, позначеного як «build», до каталогу за замовчуванням веб-сервера Nginx. Ця конфігурація налаштовує Nginx на хостинг вашого додатка React.

КРОК 3: СТВОРЕННЯ ТА ЗАПУСК ОБРАЗУ DOCKER

Створіть образ Docker за допомогою команди docker build таким чином:

> docker build -t testapp

КРОК 4: ПЕРЕВІРКА РОЗМІРУ ОБРАЗУ

Щоб оцінити вплив багатоступеневої збірки Docker на розмір образу, ви можете ще раз перелічити свої образи Docker:

> docker images

Вищезазначена команда відобразить список усіх образів Docker у вашій системі, що дозволить вам порівняти розміри до та після впровадження багатоетапного процесу побудови Docker.
Після завершення побудови запустіть контейнер з образу:

> docker run -d -p 80:80 testapp

Тепер ви можете отримати доступ до своєї програми React у браузері за адресою http://localhost.

Використовуючи багатоетапні збірки Docker, ми створили образ Docker, який містить тільки необхідні файли для обслуговування програми React, зменшивши її розмір і підвищивши безпеку.

ЯКІ ПРОБЛЕМИ МОЖУТЬ ВИНИКАТИ ПРИ ВИКОРИСТАННІ БАГАТОЕТАПНИХ ЗБІРОК DOCKER?

Багатоетапні збірки, хоча і є корисними, можуть створювати певні проблеми:

  1. Швидкість збірки: через наявність декількох етапів у Dockerfile процес збірки може бути повільним. Створення готового до виробництва образу передбачає кілька кроків, що може збільшити час, необхідний для збірки.
  2. Кешування: якщо ви використовуєте останню версію Docker з увімкненим BuildKit, кешування може допомогти підвищити швидкість збірки. Однак це не усуває проблему, і збірки все одно можуть бути трудомісткими.
  3. Читабельність: Ще однією проблемою є складність і читабельність Dockerfile. З додаванням нових етапів Dockerfile може стати складнішим для розуміння та обслуговування, особливо для тих, хто тільки починає працювати з проектом.

Знаючи про ці проблеми, ви зможете краще управляти та оптимізувати використання багатоетапних збірок Docker.

ЯКІ Є НАЙКРАЩІ ПРАКТИКИ СТВОРЕННЯ БАГАТОЕТАПНИХ ЗБОРОК DOCKER?

Ось кілька важливих практик, про які слід пам'ятати під час використання багатоетапних збірок Docker:

Мінімізуйте залежності на етапах: переконайтеся, що на кожному етапі процесу збірки включені лише найнеобхідніші залежності та файли. Це допоможе зменшити розмір кінцевого образу Docker та покращити загальну продуктивність.

Виберіть оптимальні базові образи: виберіть базові або батьківські образи, які містять тільки необхідні пакети для вашої програми. Використання легких базових образів, таких як варіанти Alpine Linux, може ще більше зменшити розмір образу та споживання ресурсів.

Відокремте дані програми: уникайте включення даних програми безпосередньо в образ Docker, оскільки це може збільшити його розмір. Натомість використовуйте томи Docker для управління та збереження даних програми окремо від самого контейнера. Такий підхід не тільки зменшує розмір образу, але й підвищує гнучкість та масштабованість.

Дотримуючись наведених вище рекомендацій, ви можете оптимізувати ефективність і продуктивність багатоетапних збірок Docker, що призведе до створення менших і більш оптимізованих образів контейнерів.

ВИСНОВОК

Правильне створення образів Docker є важливим, оскільки це робить вашу програму швидшою і безпечнішою. Більші образи можуть мати більше проблем із безпекою, тому важливо не поспішати і бути обережним. Багатоетапні збірки спростили процес, спростивши кроки, які потрібно виконати. Багатоетапні збірки Docker — це потужна функція, яка дозволяє використовувати в dockerfile кілька операторів from, що допомагають створити кілька етапів. Відокремивши етапи збірки та виконання, ви можете оптимізувати свої Dockerfiles і гарантувати, що в кінцевий образ будуть включені тільки найнеобхідніші компоненти. Спробуйте це на своїх додатках і переконайтеся в результатах!

Шукаєте надійного хостинг-провайдера для VPS або виділеного сервера, а може, SSL-послуг? Host World — найкращий вибір для всіх ваших потреб у хостингу. Ось кілька наших ключових переваг, які виділяють нас серед конкурентів.

Залиште свої відгуки

Поділіться своїми думками та допоможіть нам покращитися! Ваш відгук важливий для нас.

Завантажте своє фото