Документация
VPS

Установка Docker и docker compose

Официальный репозиторий, non-root пользователь, первый compose-стек.

4 мин

Установка Docker и docker compose

Docker из репозитория Ubuntu часто устарел на пару версий. Правильный путь — официальный docker.com репозиторий.

Установка (Ubuntu 22.04/24.04, Debian 12)

# Зависимости
apt update
apt install -y ca-certificates curl gnupg

# GPG-ключ Docker
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  gpg --dearmor -o /etc/apt/keyrings/docker.gpg
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" | \
  tee /etc/apt/sources.list.d/docker.list

# Установка
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
               docker-buildx-plugin docker-compose-plugin

Проверка

docker --version
docker compose version
docker run --rm hello-world

Последняя команда скачает и запустит тестовый контейнер. Успех = Docker работает.

Non-root пользователь

Работать под root опасно. Создайте пользователя и добавьте в группу docker:

adduser deploy
usermod -aG docker deploy
# Разлогинтесь и войдите под deploy, проверьте:
# docker ps

Внимание: добавление в группу docker = root-эквивалент. Не давайте этот доступ ненадёжным пользователям.

Первый docker-compose стек

Создайте docker-compose.yml:

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped

Запустите:

mkdir html
echo '<h1>Hello from Docker</h1>' > html/index.html
docker compose up -d
docker compose ps

Откройте http://<VPS-IP> — увидите приветствие. Остановить: docker compose down.

Автозапуск при ребуте

Docker уже настроен на автозапуск (systemctl is-enabled docker). Ваши контейнеры перезапустятся благодаря restart: unless-stopped.

Cleanup дискового места

Docker любит захламлять диск. Раз в месяц:

docker system prune -af --volumes

Удалит все неиспользуемые контейнеры, образы, volumes, сети.

Что дальше