Docker на Linux: установка Engine и пошаговый чеклист для начинающих
Автор: Казачкин Даниил Михайлович · Обновлено
Для Docker на Linux с нуля нужны три проверки: совместимый дистрибутив, работающий Engine и доступ клиента к нему. Этот пошаговый чеклист предназначен для учебной машины с Ubuntu 24.04 LTS. На Debian, Fedora и других системах используйте соответствующую страницу установки: команды настройки Ubuntu-репозитория туда переносить нельзя.
Engine или Desktop
Docker Engine — служба, которая управляет образами, контейнерами, сетью и томами. Docker Desktop дополнительно даёт графический интерфейс и собственную среду исполнения. На Linux Desktop использует VM; его хранилище отличается от хранилища системного Engine. Два установленных продукта могут показывать разные контейнеры. Перед работой проверьте docker context ls и docker context show, а не считайте отсутствие контейнера потерей данных. Контексты Docker.
Ниже выбран Engine из официального apt-репозитория. Если Docker уже установлен, сначала проверьте версии и происхождение пакетов: не удаляйте работающую установку только ради прохождения урока.
cat /etc/os-release
uname -m
command -v docker
dpkg -l docker-ce docker.io docker-compose-plugin docker-buildx-pluginОтсутствующие пакеты в последней команде допустимы на новой машине. Конфликтующие пакеты и поддержку конкретного выпуска сверьте со страницей установки Ubuntu. Не используйте случайный скрипт из поисковой выдачи.
Установка на новой Ubuntu
В терминале Bash настройте ключ и источник пакетов:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginEngine и CLI — разные пакеты. Buildx нужен для сборок, Compose — для проектов из YAML. Установка только клиента не создаёт работающий сервер. На корпоративной машине настройка репозитория и прокси выполняется по правилам организации.
Проверка по шагам
sudo systemctl is-active docker
sudo docker version
sudo docker run --rm hello-world
docker compose version
docker buildx versionОжидайте active, две секции версии, приветствие контейнера и версии обоих плагинов. Если служба установлена, но остановлена, на своей учебной машине запустите её sudo systemctl start docker. Если запуск завершился ошибкой, прочитайте sudo journalctl -u docker --since '10 minutes ago': сообщение журнала важнее повторной установки.
Доступ без sudo
Группа docker даёт широкие права управления хостом, фактически сопоставимые с root. Поэтому добавление пользователя — осознанный выбор для личной среды разработки, а не способ «исправить любые permissions». При необходимости изучите rootless-режим отдельно. Модель прав Linux.
Для своей учебной машины можно выполнить sudo usermod -aG docker "$USER", затем полностью выйти из сеанса и войти снова. Проверьте id -nG и docker run --rm hello-world. Не меняйте права сокета на 666: это предоставит управление Engine всем локальным пользователям.
Типовые развилки
| Симптом | Следующая проверка |
|---|---|
docker: command not found | Установка CLI и PATH |
permission denied для сокета | Пользователь, группы, выбранный endpoint |
| Есть Client, нет Server | Служба, контекст, переменная DOCKER_HOST |
compose не команда Docker | Установлен ли Compose plugin для этой CLI |
| Образ не скачивается | DNS, прокси, TLS, доступность реестра |
Запишите в чеклист версии Engine, Compose, Buildx и имя контекста. Затем запустите docker run --rm alpine:3.22 echo linux-ready: ожидаемый вывод — linux-ready. Урок завершён, когда вы можете объяснить каждую проверку и повторить её после перезагрузки. Успех одного docker --version недостаточен: он проверяет клиент, но не сервер.