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 Hub
  • container_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

Наступні кроки

Див. також

Шлях: step-by-step/docker-compose-deploy.md

UMTC Wiki © 2026 | Ukrainian Military Tactical Communications