Установка Docker на Linux


Используемые термины: Docker, Linux.
Мы рассмотрим процесс установки Docker на популярные системы семейства Linux.
Ubuntu / Debian
Astra Linux
Rocky Linux / CentOS версий 8 и 9
CentOS 7
Fedora
РЕД ОС
Проверка работоспособности
Стартовая настройка
Установка Compose
Возможные ошибки
Дополнительные материалы
Ubuntu / Debian
Обновляем список пакетов:
apt update
Устанавливаем докер командой:
apt install docker.io
Astra Linux
Docker на Astra Linux также ставится, относительно, просто.
Обновляем список пакетов:
apt update
Устанавливаем докер командой:
apt install docker.io
Rocky Linux / CentOS (версии 8 и 9)
Устанавливаем wget:
dnf install wget
Скачиваем конфигурационный файл для репозитория докер:
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
Теперь устанавливаем docker:
dnf install docker-ce docker-ce-cli
И разрешаем автозапуск сервиса и стартуем его:
systemctl enable docker --now
CentOS 7
Устанавливаем wget:
yum install wget
Скачиваем файл репозитория:
wget -P /etc/yum.repos.d/ https://download.docker.com/linux/centos/docker-ce.repo
Устанавливаем docker:
yum install docker-ce docker-ce-cli containerd.io
Запускаем его и разрешаем автозапуск:
systemctl enable docker --now
Fedora
Устанавливаем плагин, дающий дополнительные инструменты при работе с пакетами:
dnf install dnf-plugins-core
В зависимости от версии Fedora Linux добавление репозитория будет выполняться, немного, разными командами.
а) Fedora 41 и выше (от DNF 5):
dnf config-manager addrepo --from-repofile=https://download.docker.com/linux/fedora/docker-ce.repo
б) Fedora до 40 версии включительно:
dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
Репозиторий добавлен.
Устанавливаем docker:
dnf install docker-ce docker-ce-cli containerd.io
Запускаем его и разрешаем автозапуск:
systemctl enable docker --now
РЕД ОС
Выполняется одной командой:
yum install docker-ce
Запускаем его и разрешаем автозапуск:
systemctl enable docker --now
Рекомендуемая настройка
После того, как мы установили Docker стоит внести некоторые настройки.
Создаем файл:
vi /etc/docker/daemon.json
{
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 262144,
"Soft": 262144
}
}
}
* где:
- storage-driver — драйвер хранилища. На данный момент рекомендуется использовать overlay2.
- log-driver — драйвер перехвата и хранения логов. Мы выставляем json-file, который для ведения журнала использует файловое хранилище.
- log-opts — опции журнала. В данном примере мы ограничиваем объем 30 мб — 3 файла по 10 мб.
- default-ulimits / nofile — задаем ограничение на количество открываемых файлов докером. По умолчанию, значение не большое, из-за чего некоторые процессы могут подвисать.
Для применения настроек перезапустим docker:
systemctl restart docker
Проверка после установки и настройки
Чтобы убедиться, что docker в рабочем состоянии, выполняем команду:
docker run --rm hello-world
Сначала система обнаружит, что нужного образа нет и загрузит его:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Already exists
Digest: sha256:308866a43596e83578c7dfa15e27a73011bdd402185a84c5cd7f32a88b501a24
Status: Downloaded newer image for hello-world:latest
После отобразит приветствие:
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker...
Docker работает корректно.
Установка Compose
Команда docker-compose позволяет развернуть многоконтейнерные Docker-приложения. Для установки программного обеспечения достаточно скачать уже скомпилированного бинарника с Github.
Для этого сначала убедимся в наличие пакета curl.
а) На системы DEB:
apt install curl
б) На системы RPM:
yum install curl
После продолжаем установку docker-compose.
Задаем переменную с последней версией docker-compose скрипта:
COMVER=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep 'tag_name' | cut -d\" -f4)
* в данном примере с помощью обращения к API на Github будет автоматически определена последняя версия docker-compose. Результат будет занесен в переменную COMVER.
Если нам нужна не последняя версия, переходим на страницу github.com/docker/compose/releases/latest и смотрим список доступных версий docker-compose. После создаем переменную, например:
COMVER=v2.29.7
* в данном примере мы хотим установить версию 2.29.7.
Теперь скачиваем скрипт docker-compose и помещаем его в каталог /usr/bin:
curl -L "https://github.com/docker/compose/releases/download/$COMVER/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
Даем права файлу на исполнение:
chmod +x /usr/bin/docker-compose
Запускаем docker-compose с выводом его версии:
docker-compose --version
Возможные проблемы
1. undefined symbol: seccomp_api_set
Сервис докера не запускается, а в логе можно увидеть следующий текст ошибки:
/usr/bin/containerd: symbol lookup error: /usr/bin/containerd: undefined symbol: seccomp_api_set
Причина: ошибка возникает, если установить свежую версию containerd на систему с необновленной библиотекой libseccomp.
Решение: обновляем libseccomp.
а) в CentOS:
yum update libseccomp
б) в Ubuntu:
apt --only-upgrade install libseccomp2
2. error initializing network controller list bridge addresses failed no available network
Сервис докера не запускается, а в логе можно увидеть следующий текст ошибки:
error initializing network controller list bridge addresses failed no available network
Причина: система не может создать docker-интерфейс.
Решение: создаем docker-интерфейс вручную. Устанавливаем утилиту для работы с bridge-интерфейсами.
а) в CentOS:
yum install bridge-utils
б) в Ubuntu:
apt install bridge-utils
Создаем интерфейс:
brctl addbr docker0
Назначаем IP-адреса на созданный интерфейс:
ip addr add 192.168.84.1/24 dev docker0
* в нашем примере для docker мы задали адрес 192.168.84.1.
Включаем созданный интерфейс:
ip link set dev docker0 up
Можно запускать docker:
systemctl start docker
Из контейнера нет подключения по веб-портам
Как правило, это проявляется в невозможности установить пакет или обновить кэш репозитория. Пинг по сети Интернет работает, но любые попытки подключится по портам 80 или 443 заканчиваются ошибкой.
Причина: Docker демонстрирует странное поведение, при котором он, по-видимому, игнорирует установленный сетью максимальный размер передаваемого блока данных (MTU). Следовательно, это приводит к сценариям, в которых контейнер Docker ожидает отправки больших пакетов, чем те, на обработку которых настроена базовая сеть. В этих случаях избыточные части пакета обрезаются, что приводит к потенциальным проблемам в коммуникации и передаче данных.
Решение: в настройках docker задаем значение MTU, равное 1450. Для этого открываем файл:
vi /etc/docker/daemon.json
Дописываем опцию:
{
"mtu": 1450,
...
}
Перезапустим docker:
systemctl restart docker
Читайте также
Другие полезные инструкции:
1. Создание собственного образа Docker.
2. Настройка веб-сервера в Docker (NGINX + PHP + MariaDB).