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

Обновлено Обновлено: Опубликовано Опубликовано:

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

Мы рассмотрим процесс установки Docker на системы семейства Linux — а именно, CentOS, Fedora и Ubuntu.

Ubuntu

Docker на Ubuntu ставится, относительно, просто.

Обновляем список пакетов:

apt update

Устанавливаем докер командой:

apt install docker docker.io

Разрешаем автозапуск докера и стартуем его:

systemctl enable docker

systemctl start docker

Rocky Linux / CentOS 8

Устанавливаем 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

Устанавливаем плагин, дающий дополнительные инструменты при работе с пакетами:

yum install dnf-plugins-core

Добавляем репозиторий:

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

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

Чтобы убедиться, что docker в рабочем состоянии, выполняем команду:

docker run 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 работает корректно.

Рекомендуемая настройка

После того, как мы установили Docker стоит внести некоторые настройки.

Создаем файл:

vi /etc/docker/daemon.json

{
  "data-root": "/opt/docker",
  "storage-driver": "overlay2",
  "log-driver": "json-file",
  "log-opts": {
     "max-size": "10m",
     "max-file": "3"
  }
}

* где:

  • data-root — корневая директория, относительно которой будут создаваться служебные файлы и дисковые тома.
  • storage-driver — драйвер хранилища. На данный момент рекомендуется использовать overlay2.
  • log-driver — драйвер перехвата и хранения логов. Мы выставляем json-file, который для eведения журнала использует файловое хранилище.
  • log-opts — опции журнала. В данном примере мы ограничиваем объем 30 мб — 3 файла по 10 мб.

Для применения настроек перезапустим docker:

systemctl restart docker

Установка Compose

Команда docker-compose позволяет развернуть многоконтейнерные Docker-приложения.

Для ее установка сначала переходим на страницу github.com/docker/compose/releases/latest и смотрим последнюю версию docker-compose.

После вводим:

COMVER=2.9.0

curl -L "https://github.com/docker/compose/releases/download/v$COMVER/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose

* где 2.9.0 — последняя версия 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

# Linux # CentOS # Виртуализация # Ubuntu # DevOps
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет