Docker — это платформа для упаковки, распределения и запуска приложений в изолированных средах, называемых контейнерами. Контейнер содержит приложение и все его зависимости (библиотеки, системные утилиты, конфигурацию), что обеспечивает одинаковое поведение на любых машинах, где установлен Docker.
В отличие от виртуальных машин , контейнеры используют ядро хостовой операционной системы и запускаются значительно быстрее, занимают меньше ресурсов и легче масштабируются. Основные сущности Docker: образ (шаблон файловой системы и метаданные), контейнер (запущенный экземпляр образа), Dockerfile (рецепт сборки образа), реестр (хранилище образов, например Docker Hub), том (персистентное хранилище данных) и сеть (логическая связность контейнеров).
Как установить
Установка Docker зависит от ОС. Ниже — основные шаги для популярных систем. Перед установкой убедитесь, что у вас есть права администратора.
Windows 10/11 (Docker Desktop)
Включите поддержку виртуализации в BIOS/UEFI и включите Hyper-V или WSL2 (рекомендуется WSL2).
Скачайте Docker Desktop с официального сайта и установите, выбрав backend WSL2.
После установки запустите Docker Desktop — значок кита должен показывать «Running».
macOS (Docker Desktop)
Скачайте Docker Desktop для macOS (Apple Silicon/Intel — соответствующий дистрибутив).
Перетащите приложение в Applications, запустите и пройдите первичную настройку.
Linux (Engine + CLI)
На Linux обычно устанавливают собственно Docker Engine и CLI.
Работа с Docker делится на несколько типичных задач: поиск и загрузка образов, запуск контейнеров, сборка собственных образов, управление томами и сетями, логирование и отладка.
Базовые команды
Проверить версию
docker version
Поиск образа в реестре
docker search nginx
Загрузка образа
docker pull nginx:1.27
Список образов и контейнеров
docker images
docker ps # только запущенные
docker ps -a # все (включая завершённые)
Запуск контейнера (первый опыт)
docker run --name my-nginx -p 8080:80 -d nginx:1.27
Просмотр логов и состояния
docker logs -f my-nginx
docker exec -it my-nginx sh
Остановка и удаление
docker stop my-nginx
docker rm my-nginx
Очистка "мусора"
docker system prune -f
Сборка собственных образов (Dockerfile)
Dockerfile описывает шаги сборки: базовый образ, копирование файлов, установка зависимостей, команда запуска. Каждый шаг кэшируется слоями, что ускоряет повторные сборки.
# --- build stage ---
FROM node:20-slim AS builder
WORKDIR /app
# Установим все зависимости (включая dev) для сборки
COPY package*.json ./
RUN npm ci
# Скопируем конфиги и исходники
COPY tsconfig*.json ./
# Если есть nest-cli.json — тоже скопируйте:
# COPY nest-cli.json ./
COPY src ./src
# Сборка (не требует nest CLI, если скрипт ниже на tsc)
RUN npm run build
# --- runtime stage ---
FROM node:20-slim AS runner
WORKDIR /app
# Только прод-зависимости
COPY package*.json ./
RUN npm ci --omit=dev
# Готовые артефакты
COPY --from=builder /app/dist ./dist
COPY data_for_llm ./data_for_llm
COPY config ./config
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "dist/main.js"]
#Сборка и запуск
docker build -t myapp:1.0.0 .
docker run --name myapp -p 3000:3000 -d myapp:1.0.0
Работа с томами и монтированием
Том (volume) — это управляемое Docker персистентное хранилище. Оно удобно для баз данных и пользовательских данных, переживает пересоздание контейнера.
docker run --name web -v $(pwd)/public:/usr/share/nginx/html:ro -p 8080:80 -d nginx:1.27
Сети и связь контейнеров
По умолчанию контейнеры в одной пользовательской сети могут обращаться друг к другу по имени сервиса. Создание отдельной сети повышает изоляцию.
Создать сеть
docker network create app-net
Запустить два контейнера в одной сети
docker run --name redis --network app-net -d redis:7
docker run --name api --network app-net -e REDIS_HOST=redis -p 3000:3000 -d myapp:1.0.0
Логи, ресурсы и здоровье
#Логи и статистика
docker logs -f api
docker stats
#Ограничения ресурсов
docker run --cpus="1.5" --memory="512m" -d myapp:1.0.0
#Проверка здоровья (healthcheck) через Dockerfile
#Пример (в Dockerfile):
HEALTHCHECK --interval=30s --timeout=3s --retries=3 CMD wget -qO- http://localhost:3000/health
|| exit 1
Лучшие практики
Фиксируйте версии образов и базовых слоёв (например, node:20-alpine), чтобы сборки были детерминированы.
Используйте .dockerignore для исключения лишних файлов (node_modules, .git, локальные артефакты) — это ускорит сборку и уменьшит контекст.
Запускайте процессы от непривилегированного пользователя (USER), минимизируйте attack surface.
Стройте образы как можно меньше (alpine, multi-stage), следите за регулярными обновлениями безопасности.
Не храните секреты в образах. Применяйте переменные окружения, секреты CI/CD, внешние хранилища.
Docker Compose
Docker Compose — инструмент описания и запуска многоконтейнерных приложений с помощью файла декларативной конфигурации (обычно compose.yml или docker-compose.yml). Он позволяет определить сервисы, сети, тома и зависимости, а затем запускать всё одной командой.
Compose автоматически создаёт сеть для проекта. Можно явно задавать несколько сетей и подключать сервисы выборочно. Профили (profiles) позволяют включать/выключать группы сервисов для разных сценариев (локальная разработка, CI, прод).