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

Docker — это платформа для автоматизации развертывания приложений в изолированных контейнерах. Контейнеры обеспечивают консистентную работу приложения на любом окружении, независимо от операционной системы и установленного ПО. Основные преимущества контейнеризации: лёгкость, масштабируемость, повторяемость и ускорение процессов разработки и тестирования.

Контейнеры отличаются от виртуальных машин тем, что используют ядро хостовой системы, не создавая полноценную виртуальную ОС. Это снижает накладные расходы и ускоряет запуск приложений. Контейнеры включают только необходимое для работы приложения: библиотеки, зависимости и код, что делает их лёгкими и портативными.


Установка и настройка Docker

Docker доступен для всех основных платформ: Linux, Windows, macOS. После установки Docker Engine, основными инструментами становятся:

  • docker — командная строка для управления контейнерами.
  • docker-compose — инструмент для управления многоконтейнерными приложениями.

Проверка установки выполняется командой:

docker --version
docker-compose --version

После установки можно запускать контейнеры и создавать собственные образы.


Контейнеры и образы

Образ (image) — это шаблон, из которого создаются контейнеры. Образ включает все зависимости, конфигурации и код приложения. Контейнер — это запущенный экземпляр образа. Контейнер может быть остановлен, перезапущен или удалён без воздействия на сам образ.

Создание контейнера из образа:

docker run -d --name my-vue-app -p 8080:8080 vue-app-image
  • -d — запуск в фоне
  • --name — имя контейнера
  • -p — проброс портов хостовой системы

Dockerfile и сборка образов

Dockerfile — текстовый файл с инструкциями для сборки образа. Пример для Vue.js приложения:

# Используем официальный Node.js образ
FROM node:18-alpine

# Создаем рабочую директорию
WORKDIR /app

# Копируем package.json и package-lock.json
COPY package*.json ./

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

# Копируем исходный код
COPY . .

# Собираем приложение для продакшн
RUN npm run build

# Используем Nginx для сервировки сборки
FROM nginx:alpine
COPY --from=0 /app/dist /usr/share/nginx/html

EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Пошаговое объяснение:

  1. FROM node:18-alpine — базовый образ с Node.js. Alpine минимален, что снижает размер образа.
  2. WORKDIR /app — рабочая директория внутри контейнера.
  3. **COPY package*.json ./** — копирование файлов зависимостей.
  4. RUN npm install — установка зависимостей.
  5. COPY . . — копирование исходного кода приложения.
  6. RUN npm run build — сборка Vue.js приложения.
  7. FROM nginx:alpine — отдельный этап для уменьшения размера образа, используя мультистейдж сборку.
  8. COPY –from=0 /app/dist /usr/share/nginx/html — копирование готовой сборки в Nginx.
  9. EXPOSE 80 — открытие порта для внешнего доступа.
  10. CMD [“nginx”, “-g”, “daemon off;”] — запуск Nginx в контейнере.

Сборка образа выполняется командой:

docker build -t vue-app-image .

Управление контейнерами

Основные команды Docker для работы с контейнерами:

  • docker ps — список запущенных контейнеров
  • docker ps -a — список всех контейнеров
  • docker start <container> — запуск остановленного контейнера
  • docker stop <container> — остановка контейнера
  • docker rm <container> — удаление контейнера

Для логов:

docker logs -f <container>

Docker Compose для многоконтейнерных приложений

Docker Compose позволяет описывать несколько контейнеров в одном YAML-файле. Пример для Vue.js приложения с Nginx:

version: '3.8'

services:
  vue-app:
    build: .
    ports:
      - "8080:80"
    volumes:
      - ./dist:/usr/share/nginx/html
  • build — путь к Dockerfile
  • ports — проброс портов
  • volumes — монтирование директорий для разработки

Запуск:

docker-compose up -d

Остановка и удаление контейнеров:

docker-compose down

Рекомендации по оптимизации образов

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

Работа с сетями и томами

Контейнеры могут общаться друг с другом через сети Docker:

docker network create my-network
docker run --network my-network --name container1 my-image

Тома (volumes) используются для сохранения данных вне контейнера:

docker volume create vue-data
docker run -v vue-data:/app/data my-image

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


Интеграция Vue.js с Docker

Использование Docker для Vue.js позволяет:

  • Быстро разворачивать приложение на любом сервере
  • Гарантировать одинаковое окружение для разработки и продакшн
  • Легко масштабировать через Kubernetes или Docker Swarm
  • Автоматизировать сборку и деплой в CI/CD

Контейнеризация становится ключевым элементом современного фронтенд-разработчика, особенно для приложений на Vue.js, где важны быстрые сборки, модульность и стабильность окружения.