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

Используемые термины: Docker , Linux .

Мы рассмотрим процесс установки Docker на популярные системы семейства Linux.

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 стоит внести некоторые настройки.

Создаем каталог:

mkdir -p /etc/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) .

    3. Шпаргалка по работе с docker-compose .

    4. Docker-compose для создания nginx entrypoint .

    EnglishRussianUkrainian