📦 Docker и контейнеры

Технология, которая изолирует каждый сайт в отдельный "контейнер" и делает управление простым

Что такое Docker?

Docker - это платформа для упаковки приложений в изолированные "контейнеры", которые содержат всё необходимое для работы: код, библиотеки, настройки.

💡 Простая аналогия

Представьте грузовые контейнеры на корабле. Каждый контейнер - отдельная коробка со своим содержимым. Контейнеры не мешают друг другу, легко загружаются и выгружаются. Docker работает так же - каждый сайт в своей "коробке".

Контейнер vs Виртуальная машина

📦 Контейнер (Docker)

  • ✅ Легковесный (МБ, не ГБ)
  • ✅ Запускается за секунды
  • ✅ Использует ресурсы хоста
  • ✅ Идеален для веб-приложений
  • ✅ Легко масштабировать

💻 Виртуальная машина

  • ❌ Тяжёлая (ГБ)
  • ❌ Запускается минуты
  • ❌ Требует свою ОС
  • 🔶 Полная изоляция
  • 🔶 Для запуска другой ОС

Как Docker работает у нас?

💻
Домашний компьютер (Ubuntu)
Docker Engine
🌐
biznes
:8102
verify
:8106
📚
biznesinfo
:8111

Каждый контейнер изолирован, но все работают на одном компьютере

Docker Compose

Docker Compose - инструмент для управления несколькими контейнерами одновременно. Настройки хранятся в файле docker-compose.yml.

# docker-compose.yml для biznes.lucheestiy.com

version: '3.8'

services:
  app:                            # Next.js приложение
    build: ./app
    container_name: biznes-app
    restart: unless-stopped

  nginx:                          # Веб-сервер
    image: nginx:1.25-alpine
    container_name: biznes-nginx
    ports:
      - "8102:80"               # Порт наружу : порт внутри
    depends_on:
      - app
💡 Что означает 8102:80?

8102 - порт на компьютере (снаружи контейнера)
80 - порт внутри контейнера
Запросы на порт 8102 перенаправляются на порт 80 внутри контейнера.

Ключевые понятия

📜 Image (Образ)

Шаблон для создания контейнера. Как "рецепт" - содержит всё необходимое для запуска приложения. Образы скачиваются или создаются из Dockerfile.

📦 Container (Контейнер)

Запущенный экземпляр образа. Как "готовое блюдо по рецепту". Можно запустить несколько контейнеров из одного образа.

📃 Dockerfile

Инструкция для создания образа. Описывает шаги: какую ОС взять, какие файлы скопировать, какие команды выполнить.

🗃 Volume (Том)

Постоянное хранилище данных. Данные в томе сохраняются даже если контейнер удалить и создать заново.

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

Просмотр

# Список работающих контейнеров
docker ps

# Все контейнеры (включая остановленные)
docker ps -a

# Список образов
docker images

# Использование ресурсов
docker stats

Управление с Docker Compose

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

# Остановить контейнеры
docker compose down

# Пересобрать и запустить
docker compose up -d --build

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

Логи и отладка

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

# Логи в реальном времени
docker logs -f biznes-nginx

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

# Проверить конфигурацию
docker compose config

Очистка

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

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

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

Практический пример

Как запустить сайт biznes.lucheestiy.com:

1

Перейти в папку проекта

cd /home/mlweb/biznes.lucheestiy.com
2

Проверить файлы

ls -la
# Должны увидеть: docker-compose.yml, app/, nginx/
3

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

docker compose up -d --build
# -d = в фоновом режиме (detached)
# --build = пересобрать образ
4

Проверить статус

docker compose ps
# Должны увидеть: biznes-app, biznes-nginx со статусом "Up"
5

Проверить работу

curl http://localhost:8102
# Должны увидеть HTML страницу

Частые проблемы

⚠️ Контейнер не запускается

Посмотрите логи для диагностики:

docker compose logs

⚠️ Порт уже занят

Найдите, что использует порт:

sudo lsof -i :8102

⚠️ Изменения не применяются

Пересоберите контейнер:

docker compose up -d --build --force-recreate