Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

Оптимизация развертывания с помощью многостадийных сборок контейнеров

Проблема больших образов контейнеров

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

Контейнеры позволяют автоматизировать этот процесс. В одном Dockerfile можно определить несколько стадий сборки. Хороший пример — веб-сайт на JavaScript, собираемый с помощью Node.js.

Пример размеров

Полный образ системы весит более 600 МБ, хотя для производства нужно только 22 МБ (nginx + сайт). Кроме того, наличие лишнего ПО создает риски безопасности. Решение — многостадийная сборка (multi-stage build).

Принцип многостадийной сборки

В многостадийной сборке в одном файле определяются несколько контейнеров, и только необходимые данные передаются из одной стадии в другую.

Пример Dockerfile для Node.js

Первая стадия содержит Node.js как систему сборки, вторая — веб-сервер, который копирует артефакты сборки из первой стадии.

## Базовая система Стадия 1
## Используем официальный образ Node.js
FROM node:8.11.3 as buildsystem

## Добавляем исходный код из Git-проекта
COPY ./source /root/frontend

## Собираем фронтенд с Node.js
WORKDIR /root/frontend/
RUN npm install \
&& npm run build

#####################################################################
#####################################################################

## Базовая система Стадия 2
## Используем легкий образ nginx на базе Alpine
FROM nginx:alpine

## Копируем сборку из стадии 1
RUN mkdir -p /var/www/html/<MyApp>
COPY --from=buildsystem /root/frontend/dist/ /var/www/html/<MyApp>/

## Добавляем конфигурацию nginx по умолчанию
ADD default.conf /etc/nginx/conf.d/

## Публикуем порт
EXPOSE 80

## Запускаем nginx
CMD ["nginx", "-g", "daemon off;"]

Результат и преимущества

Получается маленький контейнер только с необходимым. Мы используем очень легкий дистрибутив Linux — Alpine для nginx.

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

Промышленные технологии

  1. Построение доверия с бизнес-лидерами: выбор правильных облачных сервисов
  2. Умножение и деление в научной нотации: правила и примеры
  3. Индустрия 4.0: Интервью с Вереной Майюктке из Bosch.IO об IoT, автоматизации и фабрике будущего
  4. Создайте свой первый IoT-проект с Raspberry Pi, DHT11 и ThingSpeak
  5. Microsoft представил рекордную языковую модель на 17 млрд параметров
  6. AI-дорожные карты: стратегическое руководство для компаний цепочек поставок
  7. Умные закупки: слияние ИИ с человеческим инсайтом
  8. Эффективные контейнерные краны: точная погрузка и разгрузка для портов и ж/д узлов
  9. Эффективная сборка ARM-контейнеров на x86 системах
  10. Оптимизация развертывания с помощью многостадийных сборок контейнеров