Установка Docker Engine в Ubuntu

Пошаговая установка Docker Engine и Docker Compose в Ubuntu из официального репозитория с проверкой сервиса и тестовым контейнером.

Docker позволяет запускать приложения в изолированных контейнерах и управлять ими через единый набор команд. В этой инструкции рассматривается только установка Docker Engine и Docker Compose из официального репозитория Docker.

Проверено на: Ubuntu Server 24.04 LTS
Уровень сложности: начальный
Время выполнения: около 10–15 минут
Требуемый доступ: пользователь с правами sudo

Что будет установлено

В результате на сервере появятся:

  • Docker Engine;
  • Docker CLI;
  • containerd;
  • Docker Buildx;
  • Docker Compose Plugin.

Проверка системы

Проверьте версию Ubuntu и архитектуру:

cat /etc/os-release
dpkg --print-architecture

Для большинства VPS ожидается:

VERSION_ID="24.04"
amd64

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

Перед установкой удалите пакеты, которые могут конфликтовать с официальной версией Docker:

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

Если пакеты не были установлены, команда завершится без критических ошибок.

Установка необходимых компонентов

Обновите индекс пакетов:

sudo apt update

Установите зависимости:

sudo apt install -y   ca-certificates   curl   gnupg

Добавление GPG-ключа Docker

Создайте каталог для ключей:

sudo install -m 0755 -d /etc/apt/keyrings

Загрузите официальный GPG-ключ:

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

Проверьте, что пакет Docker берётся из официального репозитория:

apt-cache policy docker-ce

В выводе должен присутствовать адрес:

https://download.docker.com/linux/ubuntu

Установка Docker Engine

Установите Docker и дополнительные плагины:

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

Запуск и автозагрузка

Включите Docker:

sudo systemctl enable --now docker

Включите containerd:

sudo systemctl enable --now containerd

Проверьте состояние Docker:

sudo systemctl status docker --no-pager

Ожидаемый статус:

Active: active (running)

Проверка версий

Проверьте Docker Engine:

docker version

Проверьте Docker Compose:

docker compose version

Запуск тестового контейнера

Запустите официальный тестовый образ:

sudo docker run --rm hello-world

Ожидаемое сообщение:

Hello from Docker!

Это подтверждает, что:

  • клиент подключается к Docker daemon;
  • образ загружается из Docker Hub;
  • контейнер создаётся и запускается;
  • вывод контейнера передаётся в терминал.

Запуск Docker без sudo

По умолчанию доступ к Docker socket имеет только root и группа docker.

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

sudo usermod -aG docker "$USER"

Полностью завершите SSH-сессию:

exit

Подключитесь снова и проверьте группы:

id

В списке должна появиться группа:

docker

Проверьте работу без sudo:

docker ps

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

Проверка Docker socket

Проверьте права:

ls -l /var/run/docker.sock

Ожидаемый результат:

srw-rw---- 1 root docker ... /var/run/docker.sock

Проверка Docker Compose

Создайте тестовый каталог:

mkdir -p ~/docker-test
cd ~/docker-test

Создайте файл compose.yaml:

cat >compose.yaml <<'EOF'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
EOF

Запустите контейнер:

docker compose up -d

Проверьте состояние:

docker compose ps

Проверьте ответ локально:

curl -I http://127.0.0.1:8080

Остановите и удалите тестовый контейнер:

docker compose down

Удалите тестовый каталог:

cd ~
rm -rf ~/docker-test

Просмотр информации о Docker

Основная информация:

docker info

Список контейнеров:

docker ps -a

Список образов:

docker images

Использование диска:

docker system df

Обновление Docker

Docker обновляется через APT вместе с другими пакетами:

sudo apt update
sudo apt upgrade

Проверьте доступные версии:

apt-cache madison docker-ce

Удаление тестового образа

После проверки можно удалить hello-world:

docker image rm hello-world

Типичные проблемы

Permission denied при обращении к Docker socket

Проверьте группы текущей сессии:

id

Если группа docker уже назначена, полностью выйдите из SSH и подключитесь снова.

Временно можно выполнить:

newgrp docker

Docker не запускается

Проверьте сервис:

sudo systemctl status docker --no-pager

Проверьте журнал:

sudo journalctl -u docker -n 100 --no-pager

Не загружаются образы

Проверьте DNS и доступ к Docker Hub:

getent hosts registry-1.docker.io
curl -I https://registry-1.docker.io

Порт тестового контейнера недоступен

Проверьте публикацию порта:

docker compose ps

Проверьте локальный ответ:

curl -I http://127.0.0.1:8080

Если доступ нужен извне, разрешите порт в firewall отдельно.

Итог

После выполнения инструкции:

  • подключён официальный репозиторий Docker;
  • установлен Docker Engine;
  • установлен Docker Compose Plugin;
  • сервисы добавлены в автозагрузку;
  • выполнен запуск тестового контейнера;
  • при необходимости настроена работа Docker без sudo.

Настройку хранения данных, ротации логов, сетей, reverse proxy и резервного копирования контейнеров следует выполнять отдельно.

← Предыдущая статья Настройка swap в Ubuntu Следующая статья → Базовый мониторинг Ubuntu штатными средствами