Docker Compose деплой¶
Час: ~20 хвилин
Рівень: Початківець
Потрібно: VPS з Ubuntu
Що отримаємо¶
Працюючий сервіс в Docker контейнері. Для прикладу — Uptime Kuma (моніторинг).
┌──────────────────────────────────────┐
│ VPS │
│ ┌────────────────────────────────┐ │
│ │ Docker Compose │ │
│ │ ┌──────────┐ ┌────────────┐ │ │
│ │ │ Container│ │ Volumes │ │ │
│ │ │ :3001 │ │ (data) │ │ │
│ │ └──────────┘ └────────────┘ │ │
│ └────────────────────────────────┘ │
└──────────────────────────────────────┘
Передумови¶
- [ ] VPS з Ubuntu 22.04+
- [ ] SSH доступ
- [ ] Базове налаштування сервера
Крок 1: Встановлення Docker¶
# Видалити старі версії (якщо є)
sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null
# Встановити залежності
sudo apt update
sudo apt install -y ca-certificates curl gnupg
# Додати Docker GPG ключ
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Додати репозиторій
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Встановити Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Перевірка:
docker --version
docker compose version
Крок 2: Додати користувача до групи docker¶
Щоб запускати docker без sudo:
sudo usermod -aG docker $USER
# Перезайдіть в систему або виконайте:
newgrp docker
Перевірка:
docker run hello-world
Крок 3: Структура проекту¶
Створіть директорію для сервісу:
mkdir -p ~/services/uptime-kuma
cd ~/services/uptime-kuma
Крок 4: Створення docker-compose.yml¶
nano docker-compose.yml
Вміст:
version: "3.8"
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Europe/Kyiv
Пояснення:¶
image— Docker образ з Docker Hubcontainer_name— ім'я контейнераrestart: unless-stopped— автоперезапускports— порт хоста:порт контейнераvolumes— монтування директорії для данихenvironment— змінні оточення
Крок 5: Запуск сервісу¶
# Запуск в фоновому режимі
docker compose up -d
Очікуваний результат:
[+] Running 2/2
✔ Network uptime-kuma_default Created
✔ Container uptime-kuma Started
Крок 6: Перевірка¶
Статус контейнера¶
docker compose ps
Очікуваний результат:
NAME IMAGE STATUS PORTS
uptime-kuma louislam/uptime-kuma:1 Up 2 minutes 0.0.0.0:3001->3001/tcp
Логи¶
docker compose logs -f
Натисніть Ctrl+C щоб вийти.
Крок 7: Відкрити порт у firewall¶
sudo ufw allow 3001/tcp
Крок 8: Доступ до сервісу¶
Відкрийте в браузері: http://<IP_ADDRESS>:3001
При першому запуску Uptime Kuma попросить створити адміністратора.
Основні команди Docker Compose¶
# Запуск
docker compose up -d
# Зупинка
docker compose down
# Перезапуск
docker compose restart
# Логи
docker compose logs -f
# Статус
docker compose ps
# Оновлення образу
docker compose pull
docker compose up -d
# Видалення з даними
docker compose down -v
Крок 9: Оновлення сервісу¶
cd ~/services/uptime-kuma
# Зупинити
docker compose down
# Завантажити новий образ
docker compose pull
# Запустити
docker compose up -d
Крок 10: Автозапуск Docker¶
Docker вже налаштований на автозапуск. Перевірка:
sudo systemctl is-enabled docker
# Має бути: enabled
Приклад: Інший сервіс (Nginx)¶
version: "3.8"
services:
nginx:
image: nginx:alpine
container_name: nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./html:/usr/share/nginx/html:ro
- ./nginx.conf:/etc/nginx/nginx.conf:ro
Типові проблеми¶
Port already in use¶
Симптоми: Error: bind: address already in use
Рішення:
# Знайти процес на порту
sudo lsof -i :3001
# Або змініть порт в docker-compose.yml
ports:
- "3002:3001"
Container keeps restarting¶
Симптоми: Контейнер постійно перезапускається
Рішення:
# Перегляньте логи
docker compose logs
# Перевірте конфігурацію
docker compose config
Permission denied на volumes¶
Симптоми: Помилка доступу до файлів
Рішення:
# Змініть права на директорію
sudo chown -R 1000:1000 ./data
# Або використовуйте user в compose
user: "1000:1000"
Не вистачає місця¶
Симптоми: no space left on device
Рішення:
# Очистити невикористані образи та контейнери
docker system prune -a
Наступні кроки¶
- Caddy reverse proxy — HTTPS та домен
- VPS налаштування — безпека сервера
Див. також¶
Шлях: step-by-step/docker-compose-deploy.md