Pull to refresh

Comments 13

Один из примеров почему пользователи mac обречены страдать вечно.
И спасибо за новый скрипт!

Не особо я и страдаю. Конечно неприятно когда встречаются такие проблемы, но с проблемами я встречаюсь и в других ОС и ПО. Собственно моя работа и заключается в том, чтобы решать возникающие проблемы.
Извините, не мог удержаться
Я -- Винстон Вульф. Я решаю проблемы.
image
Возьму Golang, напишу программку, скомпилирую под Windows.… и 5 часов спустя осознал поспешность своих выводов… В тот момент в первый раз вспомнился смех Нельсона. ХА-ХА! Который преследовал меня все то время, что я потратил на изучение вопроса.
На четвертый день праздников, изрядно от них устав, идея скачать и собрать правильно docker-образ настигла меня опять
На второй день всё таки решил написать скрипт с нуля.
На вопрос по именованию директорий потратил два вечера.
Было уже 5 утра и голова не особо думала, так что после сна я вернулся к просмотру кода.
были мысли собрать свой docker с Блек-Джеком и логированием данных.
вот прям совсем не смешно, в docker-desktop для mac os ограничение на длину строки в логе 947 символов
Все даты должны быть установлены с учетом часового пояса, соответственно. Так как все работы я проводил в mac os, то заметил одно отличие.
вторая проблема с mac os, это отсутствие группы root
Открыв оба архива в hex-редакторе увидел небольшое отличие

Всё это и называется — страдать.

Да, смотрел. Есть у skopeo возможность сохранять образы в локальную папку, НО:
Skopeo operates on the following image and repository types:

dir:path An existing local directory path storing the manifest, layer tarballs and signatures as individual files. This is a non-standardized format, primarily useful for debugging or noninvasive container inspection.
Там же есть:
oci:path:tag An image tag in a directory compliant with «Open Container Image Layout Specification» at path.

то есть так же можно копировать образы в локальную папку, только в формате OCI.
К сожалению docker не умеет работать с OCI-образами github.com/moby/moby/pull/33355, от слова совсем. В skopeo не импортируются пакеты docker/image v1 и tarexport, и даже нативного tarfile, как нет и функционала который бы использовал эти модули. По этому для решения изначальной задачи docker-drag подходит больше, чем skopeo.
Не понял, а как тогда skopeo копирует образы между папкой с OCI образом и докером/докер регистри туда и обратно? Разве это не то, что вам нужно?
OCI достаточно легко превратить в docker v2 image и наоборот. Этим skopeo и занимается.
skopeo не решает основной вопрос:
Но как проверить, что у менеджера образы оказались именно в том виде, что и в нашем registry? А никак!

Этим он не сильно отличается от тех двух скриптов, что указаны в начале статьи.
Так, что skopeo не то, что мне нужно было.

если я правильно понял вашу задачу, то она решеается просто:


  1. у себя, где есть все образы: docker image save image:1 image:2 ... | xz -z -9 > all_images.tar.xz
  2. передать получившийся архив любым удобным способом
  3. на целевой системе: xzcat all_images.tar.xz | docker load

я правильно вижу вашу задачу?

Изначально я её так и решил. Только первым пунктом было создание виртуалки в облаке потому, что не используем docker на наших серверах и выполнить команду `docker save` не получится. Тратить вагон времени на скачивание образов к себе из ДЦ в Москве, что бы потом загрузить на шару в ДЦ в Москве, ну такое.
Так что при возникновении подобной задачи ещё раз (надеюсь не повторится), теперь её проще будет решить с помощью gitlab-ci.
Вот здесь и здесь для меня творится магия, я никогда не работал с восьмеричной системой и не понимаю для чего здесь нужен амперсанд (может кто в комментах поделится знаниями).

Это просто побитовое умнодение (Логическое И). Это там нужно, что бы получить только 4 последние цифры из числа (как в цифровом формате прав доступа)
0o7777 = 0b1111_1111_1111
Допустим у нас в mode 0o452555 (0b10_0101_0101_0110_1101)
Выполнив побитовое умножение получим 4 цифры исходного числа: 0o2555
Sign up to leave a comment.

Articles