Мы можем сохранять образы Docker в локальные .tar-файлы, а затем загружать и запускать эти образы Docker из локальных .tar-файлов. В этом посте я документирую свои эксперименты по обучению.
Я знаю, что мы можем создать локальный реестр и загружать образы Docker в этот реестр вместо общедоступных. Мне нравятся локальные файлы, поэтому я сначала исследую этот вариант.
Код, используемый в этом посте, является точным кодом, разработанным для Python: Docker image build — «the Werkzeug» problem 🤖! Его можно клонировать:
git clone -b v1.0.2 https://github.com/behai-nguyen/flask-restx-demo.git
Обратите внимание, что в этом посте все образы Docker собраны на Windows 10 Pro.
Оглавление
- Среды
- Сборка и сохранение образов Windows
- Сборка и сохранение образов linux/arm64
- Загрузка и запуск образов Windows
- flask_restx_demo-win-by-id.tar
- flask_restx_demo-win-by-name.tar
- Загрузка и запуск образа linux/arm64 на Synology DS218
Среды
- Synology DS218 — DSM 7.1-42661 Update 3.
- Windows 10 Pro — версия 10.0.19044 build 19044.
- Windows «docker» CLI — версия 20.10.12, сборка e91ed57.
- Windows Docker Desktop — версия 4.4.3. Последняя версия — 4.10.1.
- Synology DS218 — доступ к нему осуществляется через имя устройства omphalos-nas-01 вместо IP-адреса.
Сборка и сохранение образов Windows
Смотрите также официальный документ docker save.
Чтобы все было чисто, я также удалил все связанные контейнеры и образы перед тестированием.
❶ Выполните обычную сборку:
F:flask_restx_demo>docker build --tag flask-restx-demo .
Мы можем сохранять изображения, используя стандартное перенаправление вывода > или опцию —output. Изображения можно идентифицировать по их именам, т.е. по значениям в столбце REPOSITORY при выводе списка изображений, или по их идентификаторам.
❷ Сохранить по имени изображения:
F:flask_restx_demo>docker save flask-restx-demo > E:docker-imagesflask_restx_demo-win-by-name.tar
❸ Сохранить по идентификатору изображения:
Идентификаторы изображений можно получить с помощью команды:
docker images
Сохранение того же изображения с использованием его Id и параметра —output:
F:flask_restx_demo>docker save 1bbe6c6752a2 --output E:docker-imagesflask_restx_demo-win-by-id.tar
Команда docker save, похоже, ничего не выводит:
Два ( 2 ) выходных файла и их размеры. Обратите внимание на небольшую разницу в размерах:
Сборка и сохранение образов linux/arm64
Ранее мы уже обсуждали, как подготовиться и собрать многоархивные образы на Windows 10 Pro. Пожалуйста, посмотрите Synology DS218: неподдерживаемая установка и использование Docker… | Тестовая установка — пункты ❶ и ❸.
В общем, чтобы подготовить многоархивный профиль сборки mybuilder, запустите:
C:>docker buildx create --name mybuilder --driver-opt network=host --use
Затем для сборки, и для push на https://hub.docker.com/ после завершения сборки:
F:some_project>docker buildx build --platform linux/arm64 --tag username/some-project --push .
❶ Попробуйте собрать образ только для linux/arm64, то есть не выталкивайте образ в реестр после завершения сборки:
F:flask_restx_demo>docker buildx build --platform linux/arm64 --tag flask-restx-demo-arm64 .
Образ не загружается: это должно быть логично, так как эта сборка для linux/arm64, а не для Windows.
В процессе поиска проблемы я нашел вот это сообщение Куда делся собранный мультиплатформенный образ? #166, ответы пользователя barcus дают решение.
❷ Чтобы собрать и сохранить локально:
F:flask_restx_demo>docker buildx build --platform linux/arm64 --output "type=docker,push=false,name=flask-restx-demo-arm64,dest=E:docker-imagesflask-restx-demo-arm64.tar" .
Файл образа E:docker-imagesflask-restx-demo-arm64.tar, его размер меньше половины предыдущих двух ( 2 ):
Загрузка и запуск образов Windows
Смотрите также официальный документ docker load.
Два файла образов flask_restx_demo-win-by-id.tar и flask_restx_demo-win-by-name.tar должны быть одинаковыми. В любом случае, я тестирую их оба.
flask_restx_demo-win-by-id.tar
❶ Начните с чистого листа. Удалите все существующие связанные контейнеры и образы.
❷ Чтобы загрузить файл образа, используйте:
F:>docker load --input E:docker-imagesflask_restx_demo-win-by-id.tar
Загруженное изображение имеет тот же Id, что и исходное изображение: 1bbe6c6752a2 — смотрите снимок экрана ниже:
Поскольку загруженное изображение не имеет имени, мы должны запустить его через его Id изображения.
❸ Запустите загруженный образ по его Id: 1bbe6c6752a2
F:>docker run --publish 8000:8000 --rm 1bbe6c6752a2
Мы запускаем его в режиме без отсоединения, то есть без опции -d, чтобы мы могли видеть вывод на экране командной строки:
❹ Мы можем получить доступ к контейнеру через следующие URL:
Swagger UI URL:
http://localhost:8000/api/v1/ui
URL API:
http://localhost:8000/api/v1/trees
flask_restx_demo-win-by-name.tar
❶ Начните с чистого листа. Остановите и удалите предыдущий тестовый контейнер.
❷ Удалите все существующие связанные образы.
❸ Загрузить:
F:>docker load --input E:docker-imagesflask_restx_demo-win-by-name.tar
На этот раз у загруженного изображения определены свойства REPOSITORY и TAG:
❹ Запустите загруженное изображение с портом, отличным от предыдущего запуска —publish 9010:8000:
F:>docker run --publish 9010:8000 --rm flask-restx-demo
❺ Как и раньше, мы можем получить доступ к контейнеру через следующие URL, обратите внимание на порт:
http://localhost:9010/api/v1/ui
http://localhost:9010/api/v1/trees
Загрузка и запуск образа linux/arm64 на Synology DS218
Вспомните из раздела Сборка и сохранение образов linux/arm64, файл образа был сохранен в E:docker-imagesflask-restx-demo-arm64.tar.
❶ На блоке Synology DS218 запустите демон Docker, если он еще не запущен:
$ sudo dockerd &
❷ Запустите чистый режим. На блоке Synology DS218 удалите все связанные контейнеры и образы.
❸ Скопируйте файл E:docker-imagesflask-restx-demo-arm64.tar в папку $HOME/Test/ блока Synology DS218.
❹ Загрузите файл изображения:
behai@omphalos-nas-01:~/Test$ sudo docker load --input flask-restx-demo-arm64.tar
Изображение загружается успешно, смотрите результаты проверки на снимке экрана ниже:
❺ Запустите загруженное изображение с помощью:
behai@omphalos-nas-01:~/Test$ sudo docker run --network=host -v "/run/docker.sock:/var/run/docker.sock" --rm flask-restx-demo-arm64
Запуск проходит успешно:
❻ Как и раньше, мы можем получить доступ к контейнеру по следующим URL-адресам из Windows 10 Pro:
http://omphalos-nas-01:8000/api/v1/ui
http://omphalos-nas-01:8000/api/v1/trees
Обратите внимание, в репозитории теперь есть тестовая HTML страница с использованием JQuery test_client_appjquery-ajaxTreeAPIClient.html, просто скопируйте ее на веб-сайт или в виртуальный веб-каталог и запустите ее оттуда, для URL API используйте http://omphalos-nas-01:8000/api/v1/trees.
✿✿✿
Мне очень нравится изучать и писать в блоге об этой функции Docker, я нахожу ее очень полезной… Спасибо, что прочитали, и я надеюсь, что вы также найдете информацию в этом посте полезной.