Docker контейнеризация

Docker предоставляет средство упаковки приложения с его зависимостями в изолированный контейнер, что обеспечивает одинаковое поведение на разных средах. Основной объект — Docker образ, который создаётся на основе Dockerfile.

Основные команды

  • docker build -t my-app . — создание образа из Dockerfile.
  • docker run -p 8080:80 my-app — запуск контейнера с пробросом портов.
  • docker ps — просмотр запущенных контейнеров.
  • docker stop <container_id> — остановка контейнера.

Структура Dockerfile для Angular

# Использование официального Node.js образа
FROM node:20 AS build

# Установка рабочей директории
WORKDIR /app

# Копирование package.json и package-lock.json
COPY package*.json ./

# Установка зависимостей
RUN npm install

# Копирование исходного кода
COPY . .

# Сборка Angular приложения
RUN npm run build --prod

# Использование Nginx для сервирования приложения
FROM nginx:alpine

# Копирование собранного приложения в Nginx
COPY --from=build /app/dist/my-app /usr/share/nginx/html

# Открытие порта 80
EXPOSE 80

# Запуск Nginx в foreground
CMD ["nginx", "-g", "daemon off;"]

Особенности:

  • Используется многоступенчатая сборка для уменьшения размера финального образа.
  • Node.js используется только для сборки, а финальный образ содержит только статические файлы и Nginx.
  • Порт 80 пробрасывается для внешнего доступа.

Оптимизация образов

  • Минимизировать слои команд (RUN, COPY) для уменьшения размера.
  • Использовать .dockerignore, чтобы исключить ненужные файлы.
  • Применять Alpine-версии образов для легкости.

Управление многоконтейнерными приложениями

Docker Compose позволяет описывать несколько сервисов:

version: '3'
services:
  frontend:
    build: .
    ports:
      - "8080:80"
  backend:
    image: node:20
    volumes:
      - ./backend:/app
    working_dir: /app
    command: npm start

Это позволяет запускать фронтенд и бэкенд одним файлом конфигурации, управлять сетями и зависимостями между сервисами.

Контейнеризация обеспечивает предсказуемое окружение, ускоряет деплой и упрощает CI/CD процессы.