Установка и настройка Docker в Linux

Предварительная очистка системы

Согласно документации Docker, следует на всякий случай удалить старые версии Docker, если они есть. Удаляем докер из системы

Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package docker-engine

Подключение репозитория Docker

Обновление репозиториев

Hit:1 http://ru.archive.ubuntu.com/ubuntu focal InRelease
Get:2 http://ru.archive.ubuntu.com/ubuntu focal-updates InRelease [107 kB]
Get:3 http://ru.archive.ubuntu.com/ubuntu focal-backports InRelease [98.3 kB]
Get:4 http://ru.archive.ubuntu.com/ubuntu focal-security InRelease [107 kB]
Fetched 312 kB in 9s (36.1 kB/s)
Reading package lists... Done
Building dependency tree
Reading state information... Done
All packages are up to date.

Установка GPL ключа

OK

Проверяем наличие ключа в списке

...
pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [ unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]
...

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

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Актуализируем репозитории

sudo apt update

Ищем пакет docker-ce, смотрим в каком репозитории он найден и какой у него приоритет

docker-ce:
  Installed: (none)
  Candidate: 5:19.03.12~3-0~ubuntu-focal
  Version table:
     5:19.03.12~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
     5:19.03.11~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
     5:19.03.10~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages
     5:19.03.9~3-0~ubuntu-focal 500
        500 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages

Установка Docker

Устанавливаем docker-ce

sudo apt install -y docker-ce

Проверяем какая версия установилась

Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:45:44 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:44:15 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Рекомендуется установить ( sudo apt install -y policykit-1 ) фреймворк для управления административными политиками и привилегиями. Это необходимо для того, чтобы в будущем не получить ошибку: Failed to start docker.service: The name org.freedesktop.PolicyKit1 was not provided by any .service files

Настройка Docker

Смотрим статус докера

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2020-06-25 19:36:15 UTC; 17min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 21849 (dockerd)
      Tasks: 8
     Memory: 45.5M
     CGroup: /system.slice/docker.service
             └─21849 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Jun 25 19:36:14 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:14.994058482Z" level=warning msg="Your kernel does not support cgroup rt runtime"
Jun 25 19:36:14 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:14.994196677Z" level=warning msg="Your kernel does not support cgroup blkio weight"
Jun 25 19:36:14 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:14.994329672Z" level=warning msg="Your kernel does not support cgroup blkio weight_device"
Jun 25 19:36:14 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:14.994656560Z" level=info msg="Loading containers: start."
Jun 25 19:36:15 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:15.172139123Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to se>
Jun 25 19:36:15 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:15.327212624Z" level=info msg="Loading containers: done."
Jun 25 19:36:15 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:15.450439116Z" level=info msg="Docker daemon" commit=48a66213fe graphdriver(s)=overlay2 version=19.03.12
Jun 25 19:36:15 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:15.450834302Z" level=info msg="Daemon has completed initialization"
Jun 25 19:36:15 ubuntu-server systemd[1]: Started Docker Application Container Engine.
Jun 25 19:36:15 ubuntu-server dockerd[21849]: time="2020-06-25T19:36:15.516818534Z" level=info msg="API listen on /run/docker.sock"

Назначение прав администратора

Добавляем вашего пользователя в группу Docker для выполнения команд в нем

sudo usermod --append --groups docker itcraper

Меняем id группы docker для упрощения работы с линкованными ресурсами контейнеров

sudo groupmod --gid 1500 docker

Чтобы применить изменения обычно требуется переавторизоваться учетной записью, чтобы изменения вступили в силу. Либо можно выполнить принудительную выполнить регистрацию в новой группе через newgrp

newgrp docker

Проверяем членство в группах

itcraper adm cdrom sudo dip plugdev lxd docker

Перезагружаем сервис Docker, чтобы он запомнил новый GID группы docker

sudo service docker restart

Проверяем наличие прав администратора для работы с Docker. Пробуем посмотреть системную информацию

Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.12
 Storage Driver: overlay2
  Backing Filesystem: extfs
...

Данные отображаются, привилегии администратора назначены

Настройка подсети Docker

Смотрим настройки сетевого интерфейса Docker

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:a6:3f:32:18  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Видим, что он использует подсеть: 172.17.0.0/16

Смотрим свою подсеть

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.0.10  netmask 255.255.255.0  broadcast 10.10.0.255
        ether 00:15:5d:80:01:01  txqueuelen 1000  (Ethernet)
        RX packets 150891  bytes 217198776 (217.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60463  bytes 4182640 (4.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Видим, что подсеть основного интерфейса 10.10.0.0/24 не конфликтует с подсетью интерфейса Docker 172.17.0.0/16

Назначим пул IP адресов 100.100.0.0/24 по умолчанию для подсети Docker

Создаем если еще не создан файл конфигурации Docker /etc/docker/daemon.json и прописываем содержимое

{
  "bip": "100.100.0.1/24"
}

Контейнеры Docker будут при создании получать IP адреса из диапазона 100.100.0.2 - 100.100.0.254, а 100.100.0.1 будет использоваться как шлюз. Перезагружаем Docker

sudo systemctl restart docker

Смотрим его статус

sudo systemctl status docker

Проверяем настройки интерфейса Docker

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 100.100.0.1  netmask 255.255.255.0  broadcast 100.100.0.255
        ether 02:42:f9:d5:b5:49  txqueuelen 0  (Ethernet)
        RX packets 6  bytes 392 (392.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6  bytes 476 (476.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Запуск тестового контейнера и проверка сети

Создадим контейнер для тестов BusyBox и сразу войдем в него. Аргумент --rm позволяет уничтожить контейнер после выхода из него

docker run -it --rm busybox

Выполним пинг в интернет из контейнера

PING ya.ru (87.250.250.242): 56 data bytes
64 bytes from 87.250.250.242: seq=0 ttl=248 time=8.401 ms
64 bytes from 87.250.250.242: seq=1 ttl=248 time=9.031 ms
64 bytes from 87.250.250.242: seq=2 ttl=248 time=9.001 ms
64 bytes from 87.250.250.242: seq=3 ttl=248 time=8.939 ms

--- ya.ru ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 8.401/8.843/9.031 ms

Подписаться
Уведомление о
guest
Всего: 0
Комментарии в тексте
Посмотреть все комментарии