Synology DS218: неподдерживаемая установка и использование Docker…


Отказ от ответственности

  • Я не несу никакой ответственности за любой ущерб или потери, возникшие в результате применения процедур, описанных в этой заметке.
  • Повреждения и потери включают в себя как аппаратное, программное обеспечение, так и данные.

Оглавление

  • Среды
  • AArch64 и ARM64
  • Ссылки
  • Этапы установки
    1. Скачать двоичный файл
    2. Извлечь содержимое
    3. Скопируйте извлеченное содержимое в /usr/bin/
    4. Создайте файл /etc/docker/daemon.json
    5. Запустите демон Docker
    6. Запустите административный пользовательский интерфейс Portainer
    7. Тестовая сборка
    8. Смонтируйте больше дискового пространства
    9. Запустите демон Docker и пользовательский интерфейс Portainer
    10. Запустите ту же сборку еще раз
  • Тестовая установка
    1. Создайте многоархивный профиль сборки
    2. Очистите https://hub.docker.com/repositories
    3. Соберите образ behai/python-docker для платформы linux/arm64 и разместите его на https://hub.docker.com/repositories.
    4. Протестируйте образ на Synology DS218
    5. Другие команды
  • Нерешенные вопросы
  • Заключительные замечания

Среды

  1. DSM 7.1-42661 Update 3.
  2. Windows 10 Pro — версия 10.0.19044, сборка 19044.
  3. Windows «docker» CLI — версия 20.10.12, сборка e91ed57.
  4. Windows Docker Desktop — версия 4.4.3. Последняя версия — 4.10.1.
  5. Synology DS218 — доступ к нему осуществляется через имя устройства omphalos-nas-01 вместо IP-адреса.

AArch64 и ARM64

Эти два термина относятся к одной и той же архитектуре процессора. См:

  1. The Future Is Now; ARM’s AARCH64 on the Rise — with Instana
  2. Википедия — AArch64
  3. Википедия — Семейство архитектур ARM

Войдите по SSH в NAS Synology и выполните следующие две (2) команды, чтобы узнать процессор и архитектуру:

$ cat /proc/cpuinfo | grep "model name" | uniq
$ uname -m
Войти в полноэкранный режим Выйти из полноэкранного режима

Мое устройство выдает следующие два ( 2 ) выхода соответственно:

model name      : ARMv8 Processor rev 4 (v8l)
aarch64
Войти в полноэкранный режим Выход из полноэкранного режима

Ссылки

Существует множество сообщений, в которых утверждается, что Docker действительно поддерживает AArch64, и должно быть возможно установить Docker на модели Synology, которые используют AArch64.

  1. Установка Docker на NAS Synology ARM — это не моя основная ссылка, я не действовал по ее инструкциям, но в ней есть ценная информация.
  2. Могу ли я установить Docker на Synology Nas на базе arm8 — это основная заметка, я следую инструкциям пользователя Hikariii для выполнения установки.
  3. Многоархивные образы контейнеров для Docker и Kubernetes — я использую инструкции в разделе «Современный процесс сборки многоархивного образа Docker с помощью BuildKit (buildx)» для создания образа Docker для платформы linux/arm64, и использую этот образ для тестирования установки.

Этапы установки

Войдите по SSH в Synology DS218, чтобы использовать командную строку.

❶ Скачайте двоичный файл. С сайта https://download.docker.com/linux/static/stable/aarch64 вручную загрузите последнюю версию бинарного файла Docker — docker-20.10.9.tgz в каталог DS218 $HOME.

❷ Извлеките содержимое. Выполните следующие команды:

$ cd $HOME
$ tar xzvf docker-20.10.9.tgz
Войти в полноэкранный режим Выйти из полноэкранного режима

❸ Скопируйте извлеченное содержимое в /usr/bin/:

$ sudo cp docker/* /usr/bin/
Войти в полноэкранный режим Выйти из полноэкранного режима

(Я просто педантичен!) Проверьте копирование. На основании содержимого извлеченного каталога $HOME/docker/ проверьте, что файлы были скопированы в /usr/bin/:

$ ls -l /usr/bin/containerd
$ ls -l /usr/bin/containerd-shim
$ ls -l /usr/bin/containerd-shim-runc-v2
$ ls -l /usr/bin/ctr
$ ls -l /usr/bin/docker
$ ls -l /usr/bin/dockerd
$ ls -l /usr/bin/docker-init
$ ls -l /usr/bin/docker-proxy
$ ls -l /usr/bin/runc
Войти в полноэкранный режим Выйти из полноэкранного режима

❹ Создайте файл /etc/docker/daemon.json. Нам потребуется сделать это через sudo.

File /etc/docker/daemon.json
Вход в полноэкранный режим Выход из полноэкранного режима
{
  "storage-driver": "vfs",
  "iptables": false,
  "bridge": "none"
}
Войти в полноэкранный режим Выход из полноэкранного режима

❺ Запустите демон Docker:

$ sudo dockerd &
Войти в полноэкранный режим Выйти из полноэкранного режима

Вывод очень длинный, около 81 (восемьдесят одной) строки… Есть много предупреждений, но демон все же запускается.

❻ Запустите административный пользовательский интерфейс Portainer. На основе https://raw.githubusercontent.com/wdmomoxx/catdriver/master/install-docker.sh, запустите:

$ sudo docker run -d --network=host -v "/run/docker.sock:/var/run/docker.sock" portainer/portainer:linux-arm64
Войти в полноэкранный режим Выйти из полноэкранного режима

Этот Portainer прослушивает порт 9000. В Windows 10 запустите веб-браузер с помощью:

http://omphalos-nas-01:9000
Войти в полноэкранный режим Выйти из полноэкранного режима

Мы получим следующий экран:

При необходимости создайте пользователя admin. Мы войдем в систему:

Выберите вкладку Local, затем нажмите на кнопку Connect в левом нижнем углу: этот пользовательский интерфейс Portainer теперь подключен к Docker на моем блоке Synology DS218. Этот пользовательский интерфейс Portainer UI очень похож на рабочий стол Docker Desktop в Windows 10.

❼ Тестовая сборка. Я не ожидал, что она будет работать. Вспомните, пользователь Hikariii упоминает в статье Можно ли установить Docker на Synology Nas на базе arm8:

Вы можете легко исчерпать место для docker, так как по умолчанию dsm / mount составляет всего 2 ГБ, чтобы предотвратить это, вы можете создать папку docker на вашем томе, смонтировать ее в /docker и установить ее как data-root:

Создайте простой образ Python:

behai@omphalos-nas-01:/var/services/web/app_demo$ sudo docker build --tag app-demo .
Вход в полноэкранный режим Выход из полноэкранного режима
Password:
Sending build context to Docker daemon  19.97kB
Step 1/6 : FROM python:3.8-slim-buster
3.8-slim-buster: Pulling from library/python
...
Status: Downloaded newer image for python:3.8-slim-buster
 ---> 9f30b95a0f37
Step 2/6 : WORKDIR /app_demo
no space left on device
behai@omphalos-nas-01:/var/services/web/app_demo$
Вход в полноэкранный режим Выход из полноэкранного режима

Последняя ошибка — на устройстве не осталось свободного места.

❽ Установите больше дискового пространства.

⓵ Используйте «File Station» для создания каталога docker/ и выделите ему 10 ГБ.

⓶ Этот каталог будет /volume1/docker

⓷ Смонтируйте том Docker:

$ cd $HOME
$ sudo mkdir -p /volume1/@Docker/lib
$ sudo mount -o bind "/volume1/@Docker/lib" /volume1/docker
Войти в полноэкранный режим Выйти из полноэкранного режима

⓸ Изменен /etc/docker/daemon.json — добавлено { «data-root»: «/volume1/docker» }:

File /etc/docker/daemon.json
Вход в полноэкранный режим Выход из полноэкранного режима
{
  "storage-driver": "vfs",
  "iptables": false,
  "bridge": "none",
  "data-root": "/volume1/docker"
}
Войти в полноэкранный режим Выход из полноэкранного режима

Обратите внимание, что в этот момент административный пользовательский интерфейс Portainer показывал около пяти-шести (5-6) записей для томов, один (1) использовался самим контейнером Portainer. Кроме тома Portainer, я вручную удалил все остальные.

⓹ Перезагрузите блок DS218.

❾ Затем запустите демон Docker и пользовательский интерфейс Portainer:

$ sudo dockerd &
$ sudo docker run -d --network=host -v "/run/docker.sock:/var/run/docker.sock" portainer/portainer:linux-arm64
Войти в полноэкранный режим Выйти из полноэкранного режима

Казалось, что образ Portainer снова загрузился. В разделе «Тома» Portainer теперь отображается:

❿ Запустите ту же сборку снова, ошибка no space left on device исчезла. Но есть еще много других ошибок, которые я пока не могу решить:

Тестовая установка

Я предпринял несколько попыток, чтобы запустить сборку на Synology DS218, но пока не могу найти решение. Пока что я сплю на этом. Docker CLI и Docker Desktop полностью функциональны на моей Windows 10, поэтому я решил создать образы на Windows 10, выложить их в репозитории Docker hub, а затем запустить эти образы на Synology DS218. Ниже перечислены все мои попытки.

Для этой тестовой сборки я использовал учебник Build your Python image — проект Python проще, чем проект app_demo, который я использовал в предыдущем разделе. Обратите внимание, поскольку проект простой, я не стал устанавливать Flask, а создал файл requirements.txt вручную. Схема проекта выглядит следующим образом:

f:python_docker
|
|-- app.py
|-- Dockerfile
|-- requirements.txt
Вход в полноэкранный режим Выход из полноэкранного режима
File f:python_dockerapp.py
Войти в полноэкранный режим Выход из полноэкранного режима
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'
Войти в полноэкранный режим Выход из полноэкранного режима
File f:python_dockerDockerfile
Войти в полноэкранный режим Выход из полноэкранного режима
# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0", "--port=9880"]
Войти в полноэкранный режим Выход из полноэкранного режима
File f:python_dockerrequirements.txt
Войти в полноэкранный режим Выход из полноэкранного режима
Flask==2.1.3
Войти в полноэкранный режим Выйти из полноэкранного режима

Я не хочу повторять свои неудачные попытки. Короче говоря, я просто пробовал все, что приходило мне в голову и казалось логичным: ничего не сработало. Основываясь на ошибках, я сделал несколько поисков и в конце концов нашел этот пост Многоархивные образы контейнеров для Docker и Kubernetes… Соответствующий раздел — «Современный процесс сборки многоархивного образа докера с помощью BuildKit (buildx)»:

❶ Создайте многоархивный профиль сборки. В Windows 10 запустите:

F:python_docker>docker buildx create --name mybuilder --driver-opt network=host --use
Войдите в полноэкранный режим Выйдите из полноэкранного режима

Затем проверьте его:

F:python_docker>docker buildx inspect --bootstrap
Войти в полноэкранный режим Выйти из полноэкранного режима

Мой результат:

[+] Building 90.9s (1/1) FINISHED
 => [internal] booting buildkit                                                                                                                                                                            90.0s
 => => pulling image moby/buildkit:buildx-stable-1                                                                                                                                                         86.3s
 => => creating container buildx_buildkit_mybuilder0                                                                                                                                                        3.7s
Name:   mybuilder
Driver: docker-container

Nodes:
Name:      mybuilder0
Endpoint:  npipe:////./pipe/docker_engine
Status:    running
Platforms: linux/amd64, linux/amd64/v2, linux/amd64/v3, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/mips64le, linux/mips64, linux/arm/v7, linux/arm/v6

F:python_docker>
Войти в полноэкранный режим Выйти из полноэкранного режима

❷ Очистите https://hub.docker.com/repositories. Удалите образ behai/python-docker с https://hub.docker.com/repositories — если он существует.

❸ Собрать образ behai/python-docker для платформы linux/arm64 и выложить его на https://hub.docker.com/repositories.

⓵ В командной строке Windows 10 войдите на сайт https://hub.docker.com:

F:python_docker>docker login
Войти в полноэкранный режим Выйти из полноэкранного режима

⓶ Теперь запустите сборку и запустите push:

F:python_docker>docker buildx build --platform linux/arm64 --tag behai/python-docker --push .
Войти в полноэкранный режим Выйти из полноэкранного режима

Мой успешный результат выглядит так, как показано на снимке экрана ниже:

Образ behai/python-docker теперь должен быть вытолкнут на https://hub.docker.com/repositories — мы должны проверить, что он там.

❹ Протестируйте образ на Synology DS218.

⓵ В командной строке Synology DS218 выполните команду:

$ sudo docker run -d --network=host -v "/run/docker.sock:/var/run/docker.sock" --rm behai/python-docker
Войти в полноэкранный режим Выйти из полноэкранного режима

Запуск должен пройти успешно, результат будет показан на снимке экрана ниже:

⓶ В Windows 10 запустите веб-браузер с помощью:

http://omphalos-nas-01:9880
Войти в полноэкранный режим Выйти из полноэкранного режима

Он должен запуститься без проблем:

⓷ После завершения тестирования найдите идентификатор контейнера с помощью:

$ sudo docker ps -a
Войти в полноэкранный режим Выйти из полноэкранного режима

А затем остановите целевой контейнер с:

$ sudo docker container stop <Container ID>
Войти в полноэкранный режим Выйти из полноэкранного режима

Нам не нужно удалять контейнер, поскольку флаг —rm заставит контейнер быть удаленным при остановке.

⓸ Мой второй тест проводится с app-demo, о котором говорилось ранее. Сейчас я не буду описывать процесс сборки. На компьютере Synology DS218 запустите его как:

$ sudo docker run -d --network=host -v "/run/docker.sock:/var/run/docker.sock" --rm behai/app-demo:arm64flask
Войти в полноэкранный режим Выйти из полноэкранного режима

На Windows 10 запустите веб-браузер также с:

http://omphalos-nas-01:9880
Войти в полноэкранный режим Выйти из полноэкранного режима

Браузер должен просто отобразить:

Hello, World!
Войти в полноэкранный режим Выйти из полноэкранного режима

❺ Другие команды из многоархивных образов контейнеров для Docker и Kubernetes. Запуск на Windows 10.

⓵ Команда Inspect image.

F:python_docker>docker buildx imagetools inspect behai/python-docker
Вход в полноэкранный режим Выйти из полноэкранного режима

Я запустил эту команду, она работает, как описано.

⓶ Удалить созданный ранее многоархивный профиль сборки:

( F:python_docker> )docker buildx rm mybuilder
Войти в полноэкранный режим Выйти из полноэкранного режима

Я не выполнял приведенную выше команду. Официальная документация по ней находится на docker buildx rm.

В Windows Docker Desktop на первом экране при запуске отображается:

buildx_buildkit_mybuilder0 ... RUNNING
Войти в полноэкранный режим Выход из полноэкранного режима

Нерешенные вопросы

❶ Я не могу выполнять сборки, как упоминалось ранее.

❷ Во время работы демона Docker на экране SSH появляются следующие предупреждения:

WARN[2022-07-15T14:17:35.016826267+10:00] Could not get operating system name: Error opening /usr/lib/os-release: open /usr/lib/os-release: no such file or directory
WARN[2022-07-15T14:17:35.017024230+10:00] Could not get operating system version: Error opening /usr/lib/os-release: open /usr/lib/os-release: no such file or directory
Войдите в полноэкранный режим Выйти из полноэкранного режима
WARN[2022-07-19T14:25:48.160521974+10:00] seccomp is not enabled in your kernel, running container without default profile
time="2022-07-19T14:25:48.574068043+10:00" level=info msg="starting signal loop" namespace=moby path=/run/docker/containerd/daemon/io.containerd.runtime.v2.task/moby/e9997b732228c64610cdcc9fef2f785225539b47076bcac9b4470f9bac8a7d56 pid=16006
Войти в полноэкранный режим Выйти из полноэкранного режима

❸ Я не использую Docker каждый день, поэтому на данный момент меня устраивает запускать демон Docker вручную каждый раз, когда мне нужно его использовать.

❹ Я также не настраивал Docker Group в соответствии с инструкциями. Я с удовольствием запускаю docker CLI под sudo.

Заключительные замечания

На моем Synology DS218 Docker все еще не полностью функционирует. На данный момент я могу использовать Windows 10 для создания образов для платформы AArch64 и тестировать эти образы на коробке DS218 — по крайней мере, я могу использовать ее в качестве тестовой коробки.

Я хотел бы избавиться от ошибок сборки, предупреждений и т.д… Я попытаюсь поработать над этим — это будет для меня постоянной задачей.

Это было интересное учебное упражнение… Я доволен результатами. Я надеюсь, что вы найдете это сообщение полезным, и вы сможете использовать информацию для своей собственной попытки. Спасибо за прочтение и счастливого докеринга 😂😂😂😂

Оцените статью
devanswers.ru
Добавить комментарий