Установка Docker и Docker Compose на сервер Ubuntu

Пошаговая инструкция по установке Docker и Docker Compose на сервер под управлением Ubuntu. Инструкция подходит для Ubuntu 20.04, 22.04 и 24.04.

Docker — это инструмент, который позволяет запускать приложения в изолированных контейнерах вместе со всеми их зависимостями. Благодаря этому сервисы проще разворачивать, переносить между серверами и обновлять без риска «сломать» окружение.

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

В этой инструкции показан процесс установки Docker и Docker Compose официальным способом, рекомендованным командой Docker. Мы будем использовать современные механизмы APT, отдельное хранилище GPG-ключей и формат репозиториев .sources. Такой подход считается актуальным, безопасным и подходит для серверов под управлением Ubuntu.

Если Docker уже устанавливался ранее или есть сомнения в состоянии системы, рекомендуется сначала выполнить инструкцию «Удаление старых и неофициальных версий Docker перед установкой Docker Engine».

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

Перед установкой Docker необходимо обновить локальный индекс пакетов. Это позволяет системе получить актуальный список доступных пакетов и их версий из подключённых репозиториев и избежать ошибок при установке.

sudo apt update

2. Установка необходимых зависимостей

Для подключения официального репозитория Docker и безопасной загрузки его ключей системе требуются дополнительные утилиты. Эти пакеты используются не самим Docker, а на этапе его установки и проверки подлинности источников.

sudo apt install ca-certificates curl
  • ca-certificates — набор доверенных корневых сертификатов, которые используются системой для проверки HTTPS-соединений;
  • curl — консольная утилита для загрузки данных по HTTPS, используется для получения официального GPG-ключа Docker напрямую с сайта Docker.

3. Создание каталога для GPG-ключей APT

APT использует GPG-ключи для проверки подлинности пакетов из внешних репозиториев. В современных версиях Ubuntu для этого предусмотрен отдельный каталог, в котором хранятся ключи, используемые конкретными источниками пакетов.

sudo install -m 0755 -d /etc/apt/keyrings
  • install — системная утилита, которая может создавать файлы и каталоги с заданными правами доступа;
  • -d — указывает, что нужно создать каталог, а не файл;
  • -m 0755 — задаёт права доступа:
    • владелец (root) может читать, писать и выполнять;
    • остальные пользователи могут только читать и выполнять;
  • /etc/apt/keyrings — стандартный каталог, в котором APT хранит GPG-ключи репозиториев.

4. Загрузка официального GPG-ключа Docker

Чтобы система могла доверять пакетам из репозитория Docker, необходимо добавить официальный GPG-ключ. Этот ключ используется APT для проверки подписи пакетов и подтверждает, что они получены именно от Docker, а не подменены по пути.

sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
  • curl — утилита для загрузки данных по сети;
  • f — завершает работу с ошибкой, если сервер вернул HTTP-ошибку (например, 404 или 500);
  • s — включает тихий режим, скрывая прогресс загрузки;
  • S — при ошибке выводит сообщение даже в тихом режиме;
  • L — автоматически следует за HTTP-редиректами;
  • -o /etc/apt/keyrings/docker.asc — сохраняет загруженный ключ в файл, предназначенный для хранения GPG-ключей репозиториев.

5. Назначение прав на GPG-ключ Docker

APT должен иметь возможность читать ключ, иначе репозиторий не будет работать.

sudo chmod a+r /etc/apt/keyrings/docker.asc
  • chmod — утилита для изменения прав доступа к файлам;
  • a+r — разрешает чтение файла всем пользователям системы. Это необходимо, так как APT работает от имени системных процессов, а не интерактивного пользователя;
  • файл остаётся защищённым от изменения, так как права на запись не предоставляются.

6. Добавление официального репозитория Docker

На этом шаге мы подключаем официальный репозиторий Docker к системе. Именно из него в дальнейшем будут устанавливаться и обновляться Docker и связанные с ним компоненты.

Для этого создаётся отдельный файл описания репозитория в формате .sources, который является современным и рекомендованным способом подключения источников пакетов в APT.

sudo tee /etc/apt/sources.list.d/docker.sources <<EOF 
Types: deb 
URIs: https://download.docker.com/linux/ubuntu 
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") 
Components: stable 
Signed-By: /etc/apt/keyrings/docker.asc 
EOF
  • tee — записывает переданный текст в файл с правами суперпользователя. Используется вместо обычного перенаправления (>), так как файл создаётся в системном каталоге;
  • /etc/apt/sources.list.d/docker.sources — отдельный файл источника пакетов для Docker;
  • Types: deb — указывает, что репозиторий содержит бинарные пакеты;
  • URIs — официальный адрес репозитория Docker для Ubuntu;
  • Suites — автоматически определяет кодовое имя текущей версии Ubuntu:
    • focal для 20.04,
    • jammy для 22.04,
    • noble для 24.04;
  • Components: stable — используется стабильный канал поставки пакетов;
  • Signed-By — указывает GPG-ключ, которым должны быть подписаны пакеты из этого репозитория;
  • формат .sources — современный стандарт APT, позволяющий явно связывать репозиторий с конкретным ключом и повышать безопасность.

7. Обновление списка пакетов с учётом Docker-репозитория

После добавления нового репозитория необходимо обновить список пакетов, чтобы система получила информацию о пакетах Docker и их версиях:

sudo apt update

Результат шага:

  • APT загружает список пакетов из официального репозитория Docker;
  • система «видит» пакеты Docker и готова к их установке;
  • ошибки подписи на этом этапе указывают на проблему с GPG-ключом или правами доступа к нему.

8. Установка Docker Engine и Docker Compose

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

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • apt install — устанавливает указанные пакеты;
  • -y — автоматически подтверждает установку без дополнительных вопросов;
  • docker-ce — Docker Engine, основной сервис для запуска и управления контейнерами;
  • docker-ce-cli — командная строка Docker (docker), через которую выполняется управление;
  • containerd.io — контейнерный runtime, отвечающий за фактический запуск контейнеров;
  • docker-buildx-plugin — расширение для сборки Docker-образов;
  • docker-compose-plugin — официальный плагин Docker Compose версии 2, используемый через команду docker compose.

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

9. Проверка состояния сервиса Docker

На этом шаге мы проверяем, что Docker работает корректно и не завершился с ошибкой:

sudo systemctl status docker

Что проверить:

  • статус сервиса — active (running), что означает, что Docker запущен;
  • отсутствие сообщений об ошибках в выводе команды.

Если сервис не запущен или отображаются ошибки, дальнейшие шаги выполнять не следует, необходимо сначала устранить проблему с запуском Docker.

10. Проверка работы Docker

Для проверки корректности установки запускаем тестовый контейнер.

sudo docker run hello-world

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

  • Docker загрузит тестовый образ из официального репозитория;
  • контейнер запустится и выведет сообщение Hello from Docker!.

Возможное исключение

В редких случаях команда может завершиться ошибкой, связанной с превышением лимитов на загрузку образов. Чаще всего это происходит на новых серверах с новым IP-адресом, если данный IP ранее уже использовался и лимит был исчерпан.

Пример ошибки:

Error response from daemon: error from registry:
You have reached your unauthenticated pull rate limit.
https://www.docker.com/increase-rate-limit

В этом случае возможны два варианта:

  1. снять ограничения на загрузку образов;
  2. подождать около 6 часов, после чего лимит обычно сбрасывается автоматически.

Если ошибка связана с лимитами загрузки, это не является признаком неправильной установки Docker и не влияет на дальнейшую работу системы.

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

По умолчанию управление Docker доступно только пользователю root. Чтобы работать с Docker без постоянного использования sudo, добавим текущего пользователя в системную группу docker.

sudo usermod -aG docker $USER
  • usermod — утилита для изменения параметров пользователя;
  • aG docker — добавляет пользователя в дополнительную группу docker, не удаляя его из других групп;
  • $USER — текущий пользователь, под которым выполнена команда.

⚠️ Важно: после выполнения команды необходимо выйти из системы и войти заново. Пока пользователь не перелогинился, новые групповые права не применяются, и Docker по-прежнему будет требовать sudo.

12. Проверка работы Docker без sudo

После повторного входа проверим, что Docker доступен текущему пользователю без использования sudo:

docker ps

13. Проверка версии Docker Compose

После установки Docker Compose проверим, что плагин установлен корректно и доступен через команду Docker.

docker compose version

Ожидаемый результат: вывод версии вида Docker Compose version v2.x.x.

Если команда выполняется без ошибок и версия отображается, значит Docker Compose установлен корректно и готов к использованию.

Заключение

🏁 Поздравляю! В результате выполнения этой инструкции на сервере Ubuntu установлен и настроен Docker с официального репозитория, а также Docker Compose версии 2 в виде плагина. Используемый способ установки соответствует актуальным рекомендациям команды Docker и обеспечивает корректную проверку подписи пакетов и безопасную работу с репозиторием.

После установки:

  1. Docker работает как системный сервис и автоматически запускается при старте сервера;
  2. управление контейнерами доступно без использования sudo;
  3. Docker Compose готов к использованию через команду docker compose.

Сервер готов к развёртыванию контейнеризированных приложений: веб-сервисов, ботов, баз данных и других сервисов. Все ключевые шаги установки и проверки выполнены, а возникающие на этом этапе вопросы и типичные проблемы рассмотрены в рамках инструкции, без необходимости обращаться к сторонним источникам.

Удачи в дальнейшей работе!

Установка Docker и Docker Compose на сервер Ubuntu