📦 Docker и контейнеры
Технология, которая изолирует каждый сайт в отдельный "контейнер" и делает управление простым
Что такое Docker?
Docker - это платформа для упаковки приложений в изолированные "контейнеры", которые содержат всё необходимое для работы: код, библиотеки, настройки.
Представьте грузовые контейнеры на корабле. Каждый контейнер - отдельная коробка со своим содержимым. Контейнеры не мешают друг другу, легко загружаются и выгружаются. Docker работает так же - каждый сайт в своей "коробке".
Контейнер vs Виртуальная машина
📦 Контейнер (Docker)
- ✅ Легковесный (МБ, не ГБ)
- ✅ Запускается за секунды
- ✅ Использует ресурсы хоста
- ✅ Идеален для веб-приложений
- ✅ Легко масштабировать
💻 Виртуальная машина
- ❌ Тяжёлая (ГБ)
- ❌ Запускается минуты
- ❌ Требует свою ОС
- 🔶 Полная изоляция
- 🔶 Для запуска другой ОС
Как Docker работает у нас?
Каждый контейнер изолирован, но все работают на одном компьютере
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 внутри контейнера.
Ключевые понятия
📜 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:
Перейти в папку проекта
cd /home/mlweb/biznes.lucheestiy.com
Проверить файлы
ls -la
# Должны увидеть: docker-compose.yml, app/, nginx/
Запустить контейнеры
docker compose up -d --build # -d = в фоновом режиме (detached) # --build = пересобрать образ
Проверить статус
docker compose ps
# Должны увидеть: biznes-app, biznes-nginx со статусом "Up"
Проверить работу
curl http://localhost:8102
# Должны увидеть HTML страницу
Частые проблемы
⚠️ Контейнер не запускается
Посмотрите логи для диагностики:
docker compose logs
⚠️ Порт уже занят
Найдите, что использует порт:
sudo lsof -i :8102
⚠️ Изменения не применяются
Пересоберите контейнер:
docker compose up -d --build --force-recreate