Добавить в корзинуПозвонить
Найти в Дзене

Инструмент (контейнеризация

) 📦 Distroless: контейнеры без лишнего веса Docker-образы жиреют. node:18 — 350 МБ. python:3.11 — 450 МБ. Мы тащим в продакшен пакетные менеджеры, шеллы, утилиты. Всё, что не нужно для рантайма, — это поверхность для атаки. 🌊 Distroless — это образы без всего лишнего: Нет shell, нет apt, нет пакетных менеджеров. Нет даже ls, cat, bash. Есть только ваше приложение и его runtime-зависимости. Сравнение: (таблица выше) 🔭 Как это использовать: # 1. Сборка (с толстым образом) FROM node:18 AS build WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # 2. Запуск (на дистролесс) FROM gcr.io/distroless/nodejs18-debian11 COPY --from=build /app/dist /app/dist COPY --from=build /app/node_modules /app/node_modules CMD ["/app/dist/index.js"] Что мы получили: Образ в 10 раз легче. Атакующая поверхность: только ваше приложение. Нет возможности зайти в контейнер (это фича, не баг — вы не сможете «быстро поправить на проде»). 🌀 Но есть нюансы: Сложнее отладка (нет e

Инструмент (контейнеризация)

📦 Distroless: контейнеры без лишнего веса

Docker-образы жиреют. node:18 — 350 МБ. python:3.11 — 450 МБ. Мы тащим в продакшен пакетные менеджеры, шеллы, утилиты. Всё, что не нужно для рантайма, — это поверхность для атаки.

🌊 Distroless — это образы без всего лишнего:

Нет shell, нет apt, нет пакетных менеджеров.

Нет даже ls, cat, bash.

Есть только ваше приложение и его runtime-зависимости.

Сравнение:

(таблица выше)

🔭 Как это использовать:

# 1. Сборка (с толстым образом)

FROM node:18 AS build

WORKDIR /app

COPY package*.json ./

RUN npm ci

COPY . .

RUN npm run build

# 2. Запуск (на дистролесс)

FROM gcr.io/distroless/nodejs18-debian11

COPY --from=build /app/dist /app/dist

COPY --from=build /app/node_modules /app/node_modules

CMD ["/app/dist/index.js"]

Что мы получили:

Образ в 10 раз легче.

Атакующая поверхность: только ваше приложение.

Нет возможности зайти в контейнер (это фича, не баг — вы не сможете «быстро поправить на проде»).

🌀 Но есть нюансы:

Сложнее отладка (нет exec -it).

Сигналы (SIGTERM) нужно обрабатывать корректно.

Некоторые Node.js модули требуют системных библиотек — их придётся явно добавлять.

💎 Инсайт: Distroless — это про минимализм и безопасность. Если вы не заходите в контейнеры в проде (а не должны!), вам не нужен shell. Каждая строчка в Dockerfile — это dependency. Чем их меньше — тем спокойнее сон.

➖➖➖

Используете distroless или alpine? Или предпочитаете толстые образы для простоты?

#инструменты #docker #контейнеры #безопасность #distroless