Простая установка Docker в Armbian/Linux для ARM (Raspberry/Banana/Orange/Rock/Nano Pi)

Технология разворачивания приложений в виде Docker контейнеров уже стала стандартом для Linux. Docker контейнеры особенно удобны для развертывания сложных систем в дата-центрах, корпоративных центрах обработки данных, и т.д. Docker контейнеры так же отлично подходят и для встраиваемых систем. Docker успешно работает в Armbian/Linux на armv7/arm64 устройствах Raspberry/Banana/Orange/Rock/Nano Pi, поэтому для упрощения процесса развертывания, установим Docker из готового скрипта от самой компании.

Технология Docker позволяет существенно упростить развертывание и доставку приложений на устройство. Одно из самых главных качеств Docker является его атомарность. Контейнер целиком либо развернется, либо нет. В случае сбоя запуска нового контейнера, можно применить систему A/B, при которой контейнер предыдущей версии не удаляется, а происходит откат при невозможности запуска нового контейнера. Подобная манипуляция выполняется быстро без задержек, что снижает время простоя устройства. При традиционном подходе, пошагового обновления, в случае сбоя в процессе обновления, откат изменений становится весьма сложной задачей. Европейская компания Toradex в своих встраиваемых решениях для автомобильных грузоперевозок для доставки и развертывание приложений использует технологию Docker. Компанией был разработан модуль Verdin на базе NXP i.MX8 M Mini SoC, который взаимодействует с автомобилем через CAN шину для получения телеметрии от автомобиля и отправляет эти данные в облако. Работа с CAN шиной и отправка данных в облако выполняется в Docker контейнере.

Docker ARM ARM64 Banana Pi BPI-M64 Cubietruck

Подробнее почитать в публикации Reading Vehicle OBD-II data through CAN within a containerized application in Embedded Linux — CNX SOFTWARE.

Использование Docker контейнеров для встраиваемых систем хорошо продемонстрировано на примере запуска метеостанции на одноплатном компьютере Banana Pi M64 в публикации Метеостанция на Banana Pi M64 (Linux, C#, Docker, RabbitMQ, AvaloniaUI). В решение используется три контейнера, первый считывает данные от датчиков, второй контейнере RabbitMQ обеспечивает передачу и хранение данных, третий контейнер реализует графический интерфейс для взаимодействия с пользователем.

Установка Docker

Docker будет установлен на плату Banana Pi BPI-M64, версия Armbian 21.02.1 (основана на Ubuntu 18.04.5 LTS, ядро Linux 5.10.12). uname: Linux bananapim64 5.10.12-sunxi64 #21.02.1 SMP Wed Feb 3 20:42:58 CET 2021 aarch64 aarch64 aarch64 GNU/Linux.

На официальном сайте опубликованы подробные инструкции для установки Docker в различных дистрибутивах, таких как Linux, CentOS, Debian, Fedora, RHEL, SLES, Ubuntu. Данная инструкция была подробно рассмотрена в публикации Установка Docker для ARM и 64-bit ARM (Armbian, Linux). Но что если вам необходимо автоматизировать процесс установки для разных систем Linux? На этот случай по адресу get.docker.com  размещен скрипт автоматической установки Docker. Все что вам потребуется это загрузить скрипт установки и его запустить. Скрипт автоматически пропишет репозиторий, ключи, обновит систему, и установит необходимые пакеты.

Скрипт автоматической установки Docker для Linux, подходит для x86 и ARM-систем:

sudo apt-get update
sudo apt-get install -y curl
curl -fsSL https://get.docker.com -o get-docker.sh
chmod +x get-docker.sh
sudo ./get-docker.sh

Вначале загружаем файл  get-docker.sh  с сервера get.docker.com, затем выставляем права на запуск, и запускаем скрипт установки.

Ход установки:
root@bananapim64:~# sudo apt-get update
Hit:1 http://ports.ubuntu.com bionic InRelease
...
Get:9 http://ports.ubuntu.com bionic-updates/main arm64 Packages [1,748 kB]
Fetched 3,572 kB in 58s (61.2 kB/s)
Reading package lists... Done
root@bananapim64:~# sudo apt-get install -y curl
Reading package lists... Done
Building dependency tree
Reading state information... Done
curl is already the newest version (7.58.0-2ubuntu3.16).
The following package was automatically installed and is no longer required:
  linux-bionic-root-current-bananapim64
Use 'apt autoremove' to remove it.
0 upgraded, 0 newly installed, 0 to remove and 97 not upgraded.
root@bananapim64:~# curl -fsSL https://get.docker.com -o get-docker.sh
root@bananapim64:~# chmod +x get-docker.sh
root@bananapim64:~# sudo ./get-docker.sh
# Executing docker install script, commit: 93d2499759296ac1f9c510605fef85052a2c32be
Warning: the "docker" command appears to already exist on this system.

If you already have Docker installed, this script can cause trouble, which is
why we're displaying this warning and provide the opportunity to cancel the
installation.

If you installed the current Docker package using this script and are using it
again to update Docker, you can safely ignore this message.

You may press Ctrl+C now to abort this script.
+ sleep 20
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq apt-transport-https ca-certificates curl >/dev/null
+ sh -c curl -fsSL "https://download.docker.com/linux/ubuntu/gpg" | gpg --dearmor --yes -o /usr/share/keyrings/docker-archive-keyring.gpg
+ sh -c echo "deb [arch=arm64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu bionic stable" > /etc/apt/sources.list.d/docker.list
+ sh -c apt-get update -qq >/dev/null
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends  docker-ce-cli docker-ce >/dev/null
+ version_gte 20.10
+ [ -z  ]
+ return 0
+ sh -c DEBIAN_FRONTEND=noninteractive apt-get install -y -qq docker-ce-rootless-extras >/dev/null
+ sh -c docker version
Client: Docker Engine - Community
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.9
 Git commit:        dea9396
 Built:             Thu Nov 18 00:35:52 2021
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:34:25 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

================================================================================

To run Docker as a non-privileged user, consider setting up the
Docker daemon in rootless mode for your user:

    dockerd-rootless-setuptool.sh install

Visit https://docs.docker.com/go/rootless/ to learn about rootless mode.

To run the Docker daemon as a fully privileged service, but granting non-root
users access, refer to https://docs.docker.com/go/daemon-access/

WARNING: Access to the remote API on a privileged Docker daemon is equivalent
         to root access on the host. Refer to the 'Docker daemon attack surface'
         documentation for details: https://docs.docker.com/go/attack-surface/

================================================================================
Для проверки текущей версии Docker необходимо выполнить команду:

docker version

Результат выполнения:

root@bananapim64:~# docker version
Client: Docker Engine - Community
 Version:           20.10.11
 API version:       1.41
 Go version:        go1.16.9
 Git commit:        dea9396
 Built:             Thu Nov 18 00:35:52 2021
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.11
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.9
  Git commit:       847da18
  Built:            Thu Nov 18 00:34:25 2021
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.4.4
  GitCommit:        05f951a3781f4f2c1911b05e61c160e9c30eaa8e
 runc:
  Version:          1.0.0-rc93
  GitCommit:        12644e614e25b05da6fd08a38ffa0cfe1903fdec
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Проверить статус работы Docker сервиса, команда:

sudo systemctl status docker

Дополнительные настройки Docker смотрите в публикации Установка Docker для ARM и 64-bit ARM (Armbian, Linux).

Ресурсы

Вам также может понравиться

About the Author: Anton

Programistik