Как создать многослойную сборку в Docker?
Что такое многослойные сборки в Docker?
Многослойные сборки (multi-stage builds) в Docker — это возможность создавать образы, используя несколько этапов сборки в одном Dockerfile
. Это позволяет разделять стадии сборки, что может значительно уменьшить размер итогового образа, улучшить безопасность и упрощает процесс разработки.
Зачем это нужно?
Пример многослойной сборки
Рассмотрим, как создать многослойную сборку для приложения на Node.js.
Шаг 1: Подготовьте проект
Создайте простое приложение на Node.js. Например, создайте файл app.js
с простым кодом:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`App running at http://localhost:${port}`);
});
Также создайте файл package.json
:
{
"name": "multi-stage-app",
"version": "1.0.0",
"main": "app.js",
"dependencies": {
"express": "^4.17.1"
}
}
Шаг 2: Создайте Dockerfile
Создайте Dockerfile
и добавьте следующий код для многослойной сборки:
# Первый этап: сборка приложения
FROM node:14 AS build
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
# Второй этап: создание минимального образа
FROM node:14-slim
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
EXPOSE 3000
CMD ["node", "app.js"]
Объяснение:
node:14
для установки всех зависимостей и компиляции приложения. Этот слой включает все необходимые инструменты для сборки, такие как компиляторы и пакеты.node:14-slim
для создания конечного образа вашего приложения. Здесь мы копируем только необходимые файлы из первого слоя, избегая установки инструментов для сборки. Это значительно уменьшает размер итогового образа.Шаг 3: Построение и запуск образа
Теперь вы можете собрать и запустить свое приложение с помощью следующих команд:
# Сборка образа
docker build -t multi-stage-app .
# Запуск контейнера
docker run -p 3000:3000 multi-stage-app
После выполнения этих команд ваше приложение будет доступно на http://localhost:3000
.
Заключение
Многослойные сборки в Docker являются мощным инструментом, который помогает создавать оптимизированные образы. Используя различные стадии сборки, вы можете уменьшить итоговый размер образа и повысить его безопасность, исключая ненужные зависимости. Напоминаем, что важно поддерживать Dockerfile в распределенном состоянии и регулярно проверять обновленные базовые образы для повышения безопасности.