Python: Сборка образов Docker — сохранение в *.tar-файлы и загрузка из них.

Мы можем сохранять образы 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
    1. flask_restx_demo-win-by-id.tar
    2. flask_restx_demo-win-by-name.tar
  • Загрузка и запуск образа linux/arm64 на Synology DS218

Среды

  1. Synology DS218 — DSM 7.1-42661 Update 3.
  2. Windows 10 Pro — версия 10.0.19044 build 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-адреса.

Сборка и сохранение образов 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 .
Enter fullscreen mode Выйти из полноэкранного режима

❶ Попробуйте собрать образ только для 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, я нахожу ее очень полезной… Спасибо, что прочитали, и я надеюсь, что вы также найдете информацию в этом посте полезной.

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