Отказ от ответственности
- Я не несу никакой ответственности за любой ущерб или потери, возникшие в результате применения процедур, описанных в этой заметке.
- Повреждения и потери включают в себя как аппаратное, программное обеспечение, так и данные.
Оглавление
- Среды
- AArch64 и ARM64
- Ссылки
- Этапы установки
- Скачать двоичный файл
- Извлечь содержимое
- Скопируйте извлеченное содержимое в /usr/bin/
- Создайте файл /etc/docker/daemon.json
- Запустите демон Docker
- Запустите административный пользовательский интерфейс Portainer
- Тестовая сборка
- Смонтируйте больше дискового пространства
- Запустите демон Docker и пользовательский интерфейс Portainer
- Запустите ту же сборку еще раз
- Тестовая установка
- Создайте многоархивный профиль сборки
- Очистите https://hub.docker.com/repositories
- Соберите образ behai/python-docker для платформы linux/arm64 и разместите его на https://hub.docker.com/repositories.
- Протестируйте образ на Synology DS218
- Другие команды
- Нерешенные вопросы
- Заключительные замечания
Среды
- DSM 7.1-42661 Update 3.
- Windows 10 Pro — версия 10.0.19044, сборка 19044.
- Windows «docker» CLI — версия 20.10.12, сборка e91ed57.
- Windows Docker Desktop — версия 4.4.3. Последняя версия — 4.10.1.
- Synology DS218 — доступ к нему осуществляется через имя устройства omphalos-nas-01 вместо IP-адреса.
AArch64 и ARM64
Эти два термина относятся к одной и той же архитектуре процессора. См:
- The Future Is Now; ARM’s AARCH64 on the Rise — with Instana
- Википедия — AArch64
- Википедия — Семейство архитектур 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.
- Установка Docker на NAS Synology ARM — это не моя основная ссылка, я не действовал по ее инструкциям, но в ней есть ценная информация.
- Могу ли я установить Docker на Synology Nas на базе arm8 — это основная заметка, я следую инструкциям пользователя Hikariii для выполнения установки.
- Многоархивные образы контейнеров для 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 — по крайней мере, я могу использовать ее в качестве тестовой коробки.
Я хотел бы избавиться от ошибок сборки, предупреждений и т.д… Я попытаюсь поработать над этим — это будет для меня постоянной задачей.
Это было интересное учебное упражнение… Я доволен результатами. Я надеюсь, что вы найдете это сообщение полезным, и вы сможете использовать информацию для своей собственной попытки. Спасибо за прочтение и счастливого докеринга 😂😂😂😂