Docker — базовый инструмент любого современного DevOps-стека. Ниже — минимально-достаточный гайд, чтобы за 10 минут получить рабочий Docker Engine + docker compose на Ubuntu 24.04 (LTS), с non-root запуском и автозагрузкой при ребуте.
Никакой воды, никаких deprecated docker-compose (с дефисом) — только актуальные команды 2026 года.
Шаг 1. Удалить старые версии, если есть
Даже на чистой Ubuntu иногда стоят старые пакеты docker.io из universe-репозитория. Удаляем — иначе будет конфликт с официальными.
sudo apt remove -y docker docker-engine docker.io containerd runc 2>/dev/null || trueШаг 2. Подключить официальный apt-репозиторий Docker
Docker Inc. поддерживает свой репозиторий с последними стабильными версиями. Копируем GPG-ключ, добавляем source.list.
sudo apt update
sudo apt install -y ca-certificates curl gnupg
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
sudo apt updateШаг 3. Установить Docker Engine + Compose plugin
Один пакет docker-ce, второй — docker-compose-plugin. Именно plugin, а не deprecated python-based docker-compose.
sudo apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
# проверка
docker --version # Docker version 26.x
docker compose version # Docker Compose version v2.xШаг 4. Non-root запуск
По умолчанию Docker требует sudo. Правильно — добавить свой user в группу docker, тогда команды работают без sudo.
ВНИМАНИЕ: членство в группе docker = фактические права root (через docker run --privileged -v /:/host). На проде используйте только для управляющих user'ов, не для сервисов.
sudo usermod -aG docker $USER
# перелогиниться (Ctrl+D + повторный ssh) или:
newgrp docker
# проверка без sudo:
docker run --rm hello-worldШаг 5. Автозагрузка при ребуте
Docker daemon должен стартовать автоматически.
sudo systemctl enable docker.service
sudo systemctl enable containerd.service
sudo systemctl start docker.service
# статус
sudo systemctl status dockerШаг 6. Первый docker-compose-стек
Проверяем, что compose работает. Мини-стек с nginx и Postgres.
# docker-compose.yml
services:
web:
image: nginx:1.27-alpine
ports:
- "8080:80"
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: change_me
volumes:
- pgdata:/var/lib/postgresql/data
restart: unless-stopped
volumes:
pgdata:Шаг 7. Запуск и проверка
Стек стартует одной командой. Проверяем, что nginx отвечает на 8080.
docker compose up -d
docker compose ps
curl -I http://localhost:8080 # HTTP/1.1 200 OK
# логи
docker compose logs -f web
# остановить
docker compose down # оставит volume
docker compose down -v # удалит volumeТипичные грабли
Что чаще всего ломается у новичков.
- "Cannot connect to Docker daemon" — забыли перелогиниться после
usermod -aG docker. - "port already in use" — конфликт с локальным nginx/apache.
sudo lsof -i :8080покажет виновника. - Медленная сеть в контейнере — старый MTU у виртуализованных NIC.
docker network create --opt com.docker.network.driver.mtu=1450 mynet. - Overlayfs vs zfs — на VPS с zfs-root Docker медленный. Использовать
overlay2(по умолчанию с 20.04+). - "Cannot allocate memory" — swap выключен на VPS + OOM. Включить swap-файл 2 ГБ или дать больше RAM VPS.
Никогда не публикуйте порты БД (5432, 3306, 6379) наружу через ports:. Используйте только expose: — тогда контейнер виден только другим контейнерам в той же compose-сети.