Установка Docker на Debian 13, 12, 11: подробное руководство

Docker — это платформа для контейнеризации, которая упаковывает приложения со всеми зависимостями в изолированные контейнеры. Это решает проблему «на моей машине работает». Установка Docker CE (Community Edition) на Debian из официального репозитория даёт вам актуальную версию с Docker Compose V2 и Buildx. Главные сложности для новичка: нужно удалить конфликтующие пакеты (docker.io, podman-docker), добавить официальный репозиторий Docker (лучше через extrepo), а затем разобраться с правами (добавить пользователя в группу docker) и особенностями фаервола (Docker bypass UFW). Также важно знать, что Docker CE поддерживает Debian 11, 12 и 13.

💡 В этом руководстве вы установите Docker CE на Debian двумя способами: через extrepo (рекомендованный) и ручным добавлением репозитория. Вы также узнаете, как настроить не-root доступ, настроить логирование, работать с Docker Compose и решать типичные проблемы.

В этой статье вы узнаете:

  • Как удалить конфликтующие пакеты перед установкой
  • Как установить Docker CE через extrepo (рекомендовано)
  • Как установить Docker CE через ручное добавление репозитория
  • Как настроить пользователя для запуска Docker без sudo
  • Как настроить ротацию логов Docker
  • Как работать с Docker Compose V2
  • Как решить типичные проблемы: permission denied, конфликт Signed-By, DNS в контейнерах

Для кого: разработчики, системные администраторы, DevOps-инженеры, а также все, кто хочет использовать контейнеры на Debian 11, 12 или 13.

Оглавление

1. 🔧 Предварительные требования

Перед установкой убедитесь, что:

  • У вас установлена Debian 11, 12 или 13
  • Подключение к интернету стабильно
  • У вас есть права sudo

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.

Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.

✅ Если выводит root — всё в порядке, можете продолжать.

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.

1.1 Обновление системы

Перед установкой всегда обновляйте список пакетов.

sudo apt update && sudo apt upgrade -y

Что делает:

  • sudo — права суперпользователя
  • apt update — обновляет список доступных пакетов из репозиториев
  • && — выполняет следующую команду только если предыдущая успешна
  • apt upgrade -y — обновляет все установленные пакеты до последних версий

Зачем: Это стандартная практика безопасности перед установкой нового ПО.

1.2 Удаление конфликтующих пакетов

Docker CE несовместим с пакетами docker.io, podman-docker и некоторыми другими. Удалите их перед установкой.

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do
    sudo apt remove $pkg -y 2>/dev/null
done

Что делает: Удаляет пакеты, которые могут конфликтовать с официальным Docker CE. 2>/dev/null скрывает сообщения об отсутствии пакетов.

2. 📊 Сравнение способов установки Docker

В Debian есть два основных способа установки Docker CE. Вот их сравнение:

МетодИнструментСложностьПлюсыМинусы
extrepo
рекомендовано
extrepoОчень низкаяМинимум
команд,
автоматическое
управление
ключами
Меньше
контроля
Ручное
добавление
репозитория
curl, teeСредняяПолный контроль
над ключами и
конфигурацией
Больше шагов,
можно
ошибиться

💡 Рекомендация: Для большинства пользователей extrepo — идеальный выбор. Это официальный инструмент Debian для управления сторонними репозиториями. Ручной способ выбирайте, если вам нужен точный контроль.

3. 📦 Способ 1: Установка Docker через extrepo (рекомендованный)

extrepo — это инструмент от Debian, который упрощает добавление сторонних репозиториев. Он сам скачивает GPG-ключи и создаёт файлы репозиториев.

3.1 Установка extrepo и включение репозитория Docker

sudo apt install extrepo -y
sudo extrepo enable docker-ce

Что делает: Устанавливает extrepo и добавляет официальный репозиторий Docker CE.

3.2 Обновление списка пакетов

sudo apt update

3.3 Установка Docker CE

sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Что делает: Устанавливает Docker Engine, CLI, containerd, плагин для мультиплатформенной сборки (Buildx) и Docker Compose V2.

3.4 Проверка установки

docker --version

Ожидаемый вывод в терминале:

Docker version 29.1.5, build ...

4. 📦 Способ 2: Установка Docker через ручное добавление репозитория

Этот способ подходит, если вы хотите полностью контролировать процесс.

4.1 Установка вспомогательных пакетов

sudo apt install ca-certificates curl lsb-release -y

Что делает: Устанавливает инструменты для безопасной работы с HTTPS-репозиториями и определения версии Debian.

4.2 Импорт GPG-ключа Docker

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

4.3 Создание файла репозитория (DEB822)

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/debian
Suites: $(lsb_release -cs)
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

Что делает: Создаёт файл репозитория в современном формате DEB822.

4.4 Установка Docker

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

5. 👤 Настройка пользователя для запуска Docker без sudo

⚠️ Важное предупреждение: Группа docker даёт права, эквивалентные root. Пользователи в этой группе могут монтировать любые директории хоста и получать полный доступ к системе. Добавляйте только доверенных пользователей.

5.1 Добавление пользователя в группу docker

sudo usermod -aG docker $USER

Что делает: Добавляет текущего пользователя в группу docker.

5.2 Применение изменений

Выйдите из системы и зайдите снова, или выполните:

newgrp docker

5.3 Проверка

docker run hello-world

Если всё работает: Вы увидите приветствие Docker без sudo.

6. ⚙️ Настройка Docker (лог-драйвер)

По умолчанию Docker не ограничивает размер логов, и они могут заполнить диск. Настройте ротацию логов.

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF

sudo systemctl restart docker

Что делает: Каждый контейнер будет хранить не более 3 файлов логов по 10 МБ.

7. 🐳 Docker Compose V2

Docker Compose V2 устанавливается вместе с пакетом docker-compose-plugin. Используйте команду docker compose (через пробел, не дефис).

docker compose version

Ожидаемый вывод в терминале:

Docker Compose version v2.34.0

8. ⚠️ Решение типичных проблем

8.1 Ошибка: Permission denied (пользователь не в группе docker)

Симптом: docker run hello-world выдаёт:

Got permission denied while trying to connect to the Docker daemon socket

Причина: Текущий пользователь не в группе docker.

Решение: Добавьте пользователя в группу (раздел 5) и перелогиньтесь.

8.2 Ошибка: Conflicting values set for option Signed-By

Симптом: sudo apt update выдаёт ошибку:

Conflicting values set for option Signed-By regarding source https://download.docker.com/linux/debian

Причина: Вы добавили репозиторий Docker и через extrepo, и вручную.

Решение: Удалите один из способов:

# Если хотите оставить extrepo, удалите ручной
sudo rm -f /etc/apt/sources.list.d/docker.sources

# ИЛИ если хотите оставить ручной, удалите extrepo
sudo rm -f /etc/apt/sources.list.d/extrepo_docker-ce.sources

sudo apt update

8.3 Ошибка: Docker не запускается (journalctl)

Симптом: systemctl status docker показывает failed.

Диагностика:

sudo journalctl -xeu docker.service

Частая причина: Невалидный JSON в /etc/docker/daemon.json. Проверьте синтаксис:

python3 -m json.tool /etc/docker/daemon.json

8.4 В контейнере не работает DNS

Симптом: Внутри контейнера ping google.com не работает, apt update выдаёт Temporary failure resolving.

Решение: Добавьте DNS-серверы в /etc/docker/daemon.json:

sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "dns": ["8.8.8.8", "8.8.4.4"]
}
EOF
sudo systemctl restart docker

8.5 Ошибка GPG-ключа при apt update

Симптом: sudo apt update выдаёт ошибку GPG.

Решение: Перезагрузите ключ:

sudo rm -f /etc/apt/keyrings/docker.asc
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo apt update

9. ❌ Удаление Docker

9.1 Удаление пакетов

sudo apt purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras -y
sudo apt autoremove -y

9.2 Удаление данных (опционально)

⚠️ Осторожно: Удаляет все образы, контейнеры, тома и сети.

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

9.3 Удаление репозитория

Для extrepo:

sudo extrepo disable docker-ce
sudo rm -f /etc/apt/sources.list.d/extrepo_docker-ce.sources

Для ручного добавления:

sudo rm -f /etc/apt/sources.list.d/docker.sources
sudo rm -f /etc/apt/keyrings/docker.asc

9.4 Проверка удаления

apt-cache policy docker-ce

Ожидаемый вывод: N: Unable to locate package docker-ce

10. 📝 Чек-лист: всё готово к работе

  • [ ] Система обновлена (sudo apt update && sudo apt upgrade -y)
  • [ ] Конфликтующие пакеты удалены (docker.io, podman-docker)
  • [ ] Выбран и выполнен один из способов установки (extrepo / ручной)
  • [ ] docker --version показывает версию
  • [ ] docker run hello-world работает (возможно, с sudo или после настройки группы)
  • [ ] Пользователь добавлен в группу docker и перелогинился
  • [ ] Настроена ротация логов (/etc/docker/daemon.json)
  • [ ] docker compose version показывает версию Compose

Заключение

Вы установили Docker CE на Debian. Если вы выбрали extrepo — получили самый простой способ с автоматическим управлением ключами. Если добавили репозиторий вручную — получили полный контроль. Docker позволяет упаковывать приложения в контейнеры, изолируя их от системы. Главное, что нужно запомнить: добавление пользователя в группу docker даёт права root — будьте осторожны. Docker bypass UFW, поэтому для ограничения доступа используйте привязку к 127.0.0.1 или правила в DOCKER-USER.

Что дальше:

  • Изучите docker run, docker ps, docker logs
  • Настройте Docker Compose для многоконтейнерных приложений
  • Используйте Buildx для мультиплатформенных сборок
  • Настройте Docker Rootless для запуска Docker без root
  • Для оркестрации контейнеров рассмотрите Kubernetes (k3s, minikube)