Product SiteDocumentation Site

12.6.3. Работа с crane

12.6.3.1. Аутентификация

crane использует те же учётные данные, что и Docker:
  • ~/.docker/config.json;
  • переменные окружения (DOCKER_USERNAME, DOCKER_PASSWORD);
  • IAM-роли (для AWS ECR, GCR и др.).
Для доступа к частным реестрам используется команда:
$ crane auth login <registry>
где <registry> — адрес реестра контейнеров.
Пример входа явного входа в начале сессии по имени пользователя и паролю:
$ crane auth login registry.test.alt:5000 -u username -p password
или для локального реестра:
$ crane auth login localhost:5000 -u username -p password

12.6.3.2. Работа с образами

Примечание

Если реестр контейнеров работает по протоколу HTTP (без TLS), при выполнении команд crane необходимо использовать флаг --insecure. Этот флаг разрешает взаимодействие с реестром без проверки TLS-соединения.
Реестры, расположенные на localhost или 127.0.0.1, автоматически считаются локальными и допускают работу по HTTP без указания флага --insecure.
Копирование OCI-образа в частный реестр:
$ crane copy --insecure alt:latest registry.test.alt:5000/alt:prod
$ crane copy alt:latest localhost:5000/alt:prod
Получение образа и сохранение его в формате OCI Image Layout:
$ crane pull \
   --format oci \
   localhost:5000/alpine:latest \
   oci/images/alpine:latest
Отправка OCI Image Layout в реестр:
$ crane push \
   oci/images/alpine:latest \
   localhost:5000/alpine-copy:latest
Просмотр конфигурации образа:
$ crane config alt:p11 | jq .
Список репозиториев и тегов:
$ crane catalog 192.168.0.165:5000
$ crane ls localhost:5000/myapp
Получение дайджеста образа:
$ crane digest localhost:5000/myapp:latest

12.6.3.3. Модификация образов

crane не редактирует образ «на лету», но позволяет пересоздать его с изменениями с помощью команды crane mutate.

Примечание

Все изменения производятся иммутабельно: создаётся новый образ с новым дайджестом.

Примечание

Образ необходимо поместить в реестр, например:
$ podman push localhost/myalt:latest localhost:5000/myalt:latest
Добавить метку (label):
$ crane mutate localhost:5000/myapp:latest \
  --label version=1.0 \
  --tag localhost:5000/myapp:modified
Добавить аннотацию (OCI annotations):
$ crane mutate localhost:5000/myapp:latest \
  --annotation build-system=crane \
  --tag localhost:5000/myapp:annotated
Изменить entrypoint и рабочий каталог:
$ crane mutate localhost:5000/myapp:latest \
  --entrypoint /init \
  --workdir /app \
  --tag localhost:5000/myapp:new

12.6.3.4. Работа со слоями

Для глубокой модификации файловой системы рекомендуется использовать связку:
crane export → редактирование → crane append
Пример: добавить в образ alt:latest пользовательский скрипт /usr/local/bin/hello.sh (без пересборки через Dockerfile):
  1. Экспортировать файловую систему образа в tar-архив:
    $ crane export localhost:5000/myapp:latest alt-fs.tar
    
    Создаётся архив alt-fs.tar, содержащий корневую ФС образа.
  2. Создать рабочий каталог и распаковать архив:
    $ mkdir -p modified-root
    $ tar -xf alt-fs.tar -C modified-root
    

    Примечание

    При выполнении команды tar -xf от имени обычного пользователя могут выводиться предупреждени о невозможности создания файлов устройств из каталога /dev. Это не влияет на возможность модификации образа и его последующее использование.
  3. Добавить скрипт:
    $ cat > modified-root/usr/local/bin/hello.sh <<'EOF'
    #!/bin/sh
    echo "Hello from modified ALT!"
    EOF
    
  4. Сделать скрипт исполняемым:
    $ chmod +x modified-root/usr/local/bin/hello.sh
    
  5. Упаковать обратно в tar:
    $ tar -cf modified-fs.tar -C modified-root .
    
  6. Добавить изменённую ФС как новый слой к базовому образу:
    $ crane append \
      --base localhost:5000/myapp:latest \
      --new_layer modified-fs.tar \
      --new_tag localhost:5000/myapp-modified:latest
    
Создаётся новый образ, состоящий из:
  • оригинального слоя myapp:latest;
  • нового слоя с изменениями.
Проверка результата:
$ podman run --rm localhost:5000/myapp-modified:latest hello.sh
Ожидаемый вывод:
Hello from modified ALT!

12.6.3.5. Управление тегами и манифестами

Команда crane tag создаёт или переназначает тег без передачи данных (меняется только ссылка на digest).
Создать тег stable на основе latest:
$ crane tag --insecure registry.test.alt:5000/myapp:latest stable
Теперь registry.test.alt/myapp:stable указывает на тот же образ, что и latest.
Команда crane manifest выводит сырой JSON-манифест образа — полезно для отладки, анализа слоёв, проверки платформы.
Просмотр манифеста образа:
$ crane manifest localhost:5000/myapp:latest | jq .
Проверить multi-arch манифест (индекс):
$ crane manifest alt:p11 | jq '.manifests[].platform'
Для multi-arch образов возвращается image index, а не конкретный манифест.

12.6.3.6. Работа с индексами

Команда crane index позволяет управлять multi-arch образами:
  • append — добавить манифесты;
  • filter — отфильтровать платформы.

Примечание

Все образы должны быть уже в реестре.
Пример фильтрации (удалить все, кроме linux/amd64):
$ crane index filter \
  alt:p11 \
  --platform linux/amd64 \
  --tag localhost:5000/newalt:slim-multiarch
Пример добавления манифеста
$ crane index append ubuntu \
  -m hello-world@sha256:87b9ca29151260634b95efb84d43b05335dc3ed36cc132e2b920dd1955342d20 \
  -t example.com/hello-world:weird