Docker позволяет запускать сайты, базы данных, ботов и панели в изолированных контейнерах: у каждого свои зависимости, а система остаётся чистой.
Установка
Официальный скрипт устанавливает Docker и плагин Compose в Ubuntu и Debian:
curl -fsSL https://get.docker.com | sh
Проверьте, что всё работает:
docker run --rm hello-world
docker compose version
Пример с Compose
Создайте каталог с файлом docker-compose.yml, например для простого сайта:
services:
web:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html:ro
restart: unless-stopped
docker compose up -d # запустить в фоне
docker compose logs -f # смотреть логи
docker compose down # остановить
Благодаря restart: unless-stopped контейнер сам запустится после перезагрузки VPS.
Внимание: Docker обходит ufw
Порты, которые вы публикуете через ports: (или -p), открываются в интернет, даже если ufw показывает, что они закрыты: Docker прописывает в файрвол собственные правила. Именно из-за этого многие базы данных случайно оказываются открыты всему интернету.
Если сервис нужен только другим контейнерам или самому серверу, публикуйте его только локально:
ports:
- "127.0.0.1:3306:3306"
А контейнерам из одного docker-compose.yml вообще ничего публиковать не нужно: они видят друг друга по имени сервиса.
Очистка
Старые образы накапливаются и заполняют диск. Время от времени выполняйте:
docker system prune
Команда удаляет остановленные контейнеры, неиспользуемые сети и образы без тегов. Перед этим она запросит подтверждение.