Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack •
Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack • Engineering Excellence • Senior Full Stack •
Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions •
Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions • Future Driven Architecture • AI Solutions •
Назад в блог
#docker#devops#backend#infrastructure#education

Docker для начинающих: контейнеры, Docker Compose и первый деплой в 2026

«У меня работает» — фраза, которая вызывает смех (или ужас) у любого разработчика. Docker — это инструмент, который делает эту фразу бессмысленной: если работает у вас, будет работать везде. Разбираемся, что это такое и как начать.

Что такое Docker и зачем он нужен

Docker — это платформа для контейнеризации приложений. Контейнер — это изолированная среда, в которой находится ваше приложение со всеми его зависимостями: нужной версией Node.js, нужными библиотеками, конфигурацией.

Представьте, что вы упаковываете не только приложение, но и весь «компьютер», на котором оно работает, в один портативный ящик.

Почему это важно для разработчика:

  • Новый разработчик в команде запускает проект одной командой — не тратит день на настройку окружения.
  • На продакшн-сервере приложение ведёт себя точно так же, как на вашем ноутбуке.
  • Можно одновременно запускать несколько проектов с разными версиями Node.js без конфликтов.
  • Деплой на любой сервер — одна команда.

Docker vs виртуальная машина

Распространённая путаница: Docker — это не виртуальная машина.

Виртуальная машинаDocker контейнер
ЗапускМинутыСекунды
РазмерГигабайтыМегабайты
ИзоляцияПолная ОСПроцессы ОС
Потребление RAMВысокоеМинимальное

Контейнер использует ядро хостовой ОС, поэтому он намного легче и быстрее VM.

Установка Docker

Docker Desktop (Windows и macOS)

Скачайте Docker Desktop на docker.com/get-started. Это графическая оболочка, которая включает Docker Engine, Docker Compose и удобный интерфейс управления.

Важно для Windows: Требуется включённый WSL 2 (Windows Subsystem for Linux). Docker Desktop подскажет, как это сделать при установке.

Docker на Ubuntu (Linux)

# Обновляем пакеты
sudo apt update

# Устанавливаем Docker
sudo apt install docker.io -y

# Запускаем и добавляем в автозагрузку
sudo systemctl start docker
sudo systemctl enable docker

# Добавляем пользователя в группу docker (чтобы не писать sudo)
sudo usermod -aG docker $USER

После этого перезайдите в систему — Docker готов.

Первый Docker контейнер

Проверьте, что всё установлено:

docker --version
# Docker version 27.x.x

Запустите первый контейнер:

docker run hello-world

Docker скачает образ hello-world и запустит его. Вы увидите приветственное сообщение — контейнер работает.

Ключевые концепции Docker

Image (образ)

Image — это шаблон для создания контейнера. Неизменяемый «слепок» файловой системы с приложением. Образы хранятся на Docker Hub — публичном реестре, как npm для пакетов.

# Скачать образ Node.js 22
docker pull node:22-alpine

# Список загруженных образов
docker images

Container (контейнер)

Контейнер — это запущенный экземпляр образа. Один образ → сколько угодно контейнеров.

# Запустить контейнер с Node.js в интерактивном режиме
docker run -it node:22-alpine node

# Запустить nginx веб-сервер на порту 8080
docker run -d -p 8080:80 nginx

# Список запущенных контейнеров
docker ps

# Остановить контейнер
docker stop <container_id>

Dockerfile

Dockerfile — это инструкция по сборке вашего образа. Пример для Node.js приложения:

# Базовый образ
FROM node:22-alpine

# Рабочая директория внутри контейнера
WORKDIR /app

# Копируем файлы зависимостей
COPY package*.json ./

# Устанавливаем зависимости
RUN npm ci --only=production

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

# Открываем порт
EXPOSE 3000

# Команда запуска
CMD ["node", "server.js"]

Собираем и запускаем:

# Сборка образа
docker build -t my-app .

# Запуск контейнера
docker run -p 3000:3000 my-app

Docker Compose: управление несколькими сервисами

Реальное приложение — это не один контейнер. Обычно: сервер + база данных + кэш + очередь. Docker Compose позволяет описать всю систему в одном файле и запускать её одной командой.

Пример docker-compose.yml для Full Stack приложения:

version: '3.8'

services:
  app:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgresql://user:password@db:5432/myapp
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: myapp
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

volumes:
  postgres_data:

Запуск:

# Запустить все сервисы в фоне
docker compose up -d

# Посмотреть логи
docker compose logs -f app

# Остановить всё
docker compose down

Теперь любой разработчик в команде может запустить весь проект одной командой — никакой установки PostgreSQL вручную.

Типичные команды Docker, которые используют каждый день

# Запуск контейнера
docker run -d -p 8080:80 --name my-nginx nginx

# Зайти внутрь контейнера
docker exec -it my-nginx sh

# Логи контейнера
docker logs -f my-nginx

# Удалить остановленные контейнеры
docker container prune

# Удалить неиспользуемые образы
docker image prune

# Полная очистка (осторожно!)
docker system prune -af

Docker в CI/CD

В production-процессе Docker используется в паре с CI/CD пайплайном (GitHub Actions, GitLab CI):

  1. Push кода → триггер пайплайна.
  2. Сборка Docker образа → автоматические тесты.
  3. Push образа в реестр (Docker Hub, Yandex Container Registry).
  4. Деплой на сервер через docker compose pull && docker compose up -d.

Это стандартный рабочий процесс в современных командах.

Итог

Docker — это не сложно. Это инструмент, который делает вашу работу предсказуемой и профессиональной. После знакомства с ним вы будете смотреть на деплой без Docker как на хаос.

В курсе Full Stack разработчика Docker рассматривается в модуле 17 вместе с CI/CD, reverse proxy, TLS и наблюдаемостью — всё, что нужно для реального продакшна.