Установка 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
В этом случае возможны два варианта:
- снять ограничения на загрузку образов;
- подождать около 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 и обеспечивает корректную проверку подписи пакетов и безопасную работу с репозиторием.
После установки:
- Docker работает как системный сервис и автоматически запускается при старте сервера;
- управление контейнерами доступно без использования
sudo; - Docker Compose готов к использованию через команду
docker compose.
Сервер готов к развёртыванию контейнеризированных приложений: веб-сервисов, ботов, баз данных и других сервисов. Все ключевые шаги установки и проверки выполнены, а возникающие на этом этапе вопросы и типичные проблемы рассмотрены в рамках инструкции, без необходимости обращаться к сторонним источникам.
Удачи в дальнейшей работе!