Docker представляет собой платформу для автоматизации развёртывания приложений в контейнерах. Контейнеры обеспечивают изоляцию процессов и зависимостей, позволяя приложению работать одинаково на любом сервере. В отличие от виртуальных машин, контейнеры используют ядро хостовой системы, что делает их лёгкими и быстрыми.
Ключевые концепции Docker:
Для работы с Docker необходимо установить Docker Engine и Docker CLI. После установки проверка корректной работы выполняется командой:
docker --version
docker run hello-world
Команда hello-world запускает контейнер, который выводит
тестовое сообщение, подтверждая корректность установки.
Stencil — это фреймворк для создания веб-компонентов на JavaScript.
Для контейнеризации приложения на Stencil создаётся
Dockerfile следующего вида:
# Используем официальный Node.js образ
FROM node:20-alpine
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /app
# Копируем package.json и package-lock.json для установки зависимостей
COPY package*.json ./
# Устанавливаем зависимости
RUN npm ci
# Копируем весь проект внутрь контейнера
COPY . .
# Собираем Stencil приложение
RUN npm run build
# Открываем порт для доступа к приложению
EXPOSE 3333
# Команда для запуска приложения
CMD ["npm", "start"]
Разбор ключевых этапов:
FROM node:20-alpine — лёгкий образ Node.js на базе
Alpine Linux.WORKDIR /app — задаёт рабочую директорию внутри
контейнера.COPY package*.json ./ и RUN npm ci —
ускоряет сборку за счёт кэширования слоёв Docker.COPY . . — переносит исходный код.RUN npm run build — сборка проекта Stencil.EXPOSE 3333 — открытие порта для доступа к
разработанному приложению.CMD ["npm", "start"] — команда запуска контейнера.Для управления многоконтейнерными приложениями удобно использовать
Docker Compose. Пример docker-compose.yml
для проекта Stencil:
version: '3.9'
services:
stencil-app:
build: .
ports:
- "3333:3333"
volumes:
- .:/app
- /app/node_modules
environment:
NODE_ENV: development
Пояснения:
build: . — строим образ из текущей директории.ports: "3333:3333" — пробрасываем порт контейнера
наружу.volumes — монтируем код проекта для горячей
перезагрузки при изменениях.environment — задаёт переменные окружения.Контейнеры Stencil можно оптимизировать для продакшена:
# Этап сборки
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Этап запуска
FROM nginx:alpine
COPY --from=builder /app/www /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
alpine уменьшает размер контейнера в несколько раз по
сравнению с полной версией Linux.Stencil-приложения обычно являются фронтендом, но иногда требуется хранение данных. В Docker это реализуется с помощью volumes:
volumes:
stencil_data:
Контейнеры могут монтировать внешние тома для сохранения данных между перезапусками.
Основные команды Docker для работы с контейнерами Stencil:
docker build -t stencil-app .
docker run -p 3333:3333 stencil-app
docker ps
docker logs <container_id>
docker stop <container_id>
docker rm <container_id>
docker build — сборка образа.docker run — запуск контейнера.docker ps — просмотр запущенных контейнеров.docker logs — просмотр логов приложения.docker stop и docker rm — остановка и
удаление контейнера.Docker позволяет интегрировать Stencil-приложения в CI/CD пайплайны:
memory,
cpu) при продакшене.Контейнеризация Stencil-приложений с помощью Docker позволяет стандартизировать среду разработки, ускоряет деплой и упрощает масштабирование приложений.