Product SiteDocumentation Site

12.6.3. Работа с crane

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

Копирование OCI-образа в частный реестр:
$ crane copy --insecure alt:latest registry.test.alt:5000/alt:prod
$ crane copy alt:latest localhost:5000/alt:prod
Отправка (push) последней версии образа alt в локальный реестр:
$ crane --insecure push \
   oci/images/alpine:latest \
   localhost:5000/alpine:latest
Получение (pull) OCI-образа:
$ crane --insecure pull \
   --format oci \
   localhost:5000/alpine:latest \
   oci/images/alpine: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.2. Модификация образов

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

Примечание

Все изменения производятся иммутабельно: создаётся новый образ с новым дайджестом.
Добавить метку (label):
$ crane mutate alt:latest \
  --label version=1.0 \
  --tag localhost:5000/alt:modified
Добавить аннотацию (OCI annotations):
$ crane mutate myalt:latest \
  --annotation build-system=crane \
  --tag localhost:5000/my-alt:annotated
Изменить entrypoint и рабочий каталог:
$ crane mutate app:old \
  --entrypoint '["/init"]' \
  --workdir /app \
  --tag app:new

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

Для глубокой модификации файловой системы рекомендуется использовать связку:
crane export → редактирование → crane append
Пример: добавить в образ alt:latest пользовательский скрипт /usr/local/bin/hello.sh (без пересборки через Dockerfile):
  1. Экспортировать файловую систему образа в tar-архив:
    $ crane export alt:latest alt-fs.tar
    
    Создаётся архив alt-fs.tar, содержащий корневую ФС образа.
  2. Создать рабочий каталог и распаковать архив:
    $ mkdir -p modified-root
    $ tar -xf alt-fs.tar -C modified-root
    
  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 alt:latest \
      --new_layer modified-fs.tar \
      --new_tag localhost:5000/alt-modified:latest
    
Создаётся новый образ, состоящий из:
  • оригинального слоя alt:latest;
  • нового слоя с изменениями.
Проверка результата:
$ podman run --rm localhost:5000/alt-modified:latest hello.sh
Ожидаемый вывод:
Hello from modified ALT!

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

Команда crane tag создаёт или переназначает тег без передачи данных (меняется только ссылка на digest).
Создать тег stable на основе latest:
$ crane tag registry.test.alt:5000/myalt:latest stable
Теперь registry.test.alt/myalt: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.5. Работа с индексами

Команда 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

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

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

Примечание

При работе с HTTP-реестрами необходимо использовать флаг --insecure.