Расскажи про свой опыт работы с Docker

«Расскажи про свой опыт работы с Docker» — вопрос из категории DevOps, который задают на 40% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я использую Docker для контейнеризации Node.js-приложений на протяжении нескольких лет, как в разработке, так и в production.

Основные задачи:

  • Создание Dockerfile: Сборка эффективных образов для Node.js-приложений.
  • Orchestration с Docker Compose: Настройка локального стека (приложение, БД, кэш, очереди) для разработки.
  • Оптимизация образов: Уменьшение размера итогового образа и улучшение безопасности.

Пример многоступенчатого Dockerfile для Node.js:

# Этап сборки
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Финальный этап
FROM node:18-alpine
WORKDIR /app
ENV NODE_ENV=production
USER node
COPY --from=builder --chown=node:node /app/dist ./dist
COPY --chown=node:node package*.json ./
RUN npm ci --only=production
EXPOSE 3000
CMD ["node", "dist/server.js"]

Конкретный опыт:

  • Использование .dockerignore для исключения node_modules и служебных файлов.
  • Настройка docker-compose.yml для связки Node.js-сервиса с PostgreSQL, Redis и другими зависимостями.
  • Работа с volumes для сохранения данных БД и монтирования кода в контейнеры для hot-reload в разработке.
  • Базовый опыт деплоя контейнеров в Kubernetes: создание Deployment, Service, ConfigMap и использование Helm для управления конфигурациями.

Видео-ответы