Как я могу обновить изображение в реестре артефактов Google?

При просмотре изображений в реестре артефактов Google Cloud Platform отображается столбец «Обновленное время». Однако всякий раз, когда я создаю тот же образ и нажимаю его снова, он создает новый образ.
введите описание изображения здесь

В рамках процесса сборки облака я извлекаю этот образ на основе Ruby, обновляю драгоценные камни, а затем отправляю его обратно в реестр артефактов для использования на более поздних этапах сборки (миграция БД, модульные тесты). Я надеюсь, что после обновления гемов Ruby в большинстве случаев ничего не произойдет, что приведет к идентичному образу Docker. В таком случае я бы не ожидал, что новые слои будут добавлены. Однако каждый раз, когда я строю, всегда добавляется новый слой и, следовательно, новый Артефакт.

Таким образом, проблема может заключаться в том, как работает gcr.io/cloud-builders/gsutil Cloud Build, а не в самом реестре артефактов. Вот мои соответствующие шаги по сборке, если это имеет значение:

  - id: update_gems
    name: 'gcr.io/cloud-builders/docker'
    args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/{my repo}/{my image}:deploy',
            '-f', 'docker/bundled.Dockerfile', '.' ]
  - id: update_image
    name: 'gcr.io/cloud-builders/docker'
    args: [ 'push',  'us-central1-docker.pkg.dev/$PROJECT_ID/{my repo}/{my image}:deploy' ]

Первый шаг относится к bundled.Dockerfile, который имеет следующее содержимое:

FROM us-central1-docker.pkg.dev/{same project as above}/{my repo}/{my image}:deploy
WORKDIR /workspace
RUN bundle update
RUN bundle install

Есть ли способ выполнить то, что я сейчас делаю (например, обновить контейнер времени развертывания, используемый для запуска rspec тестов и запустить rake db:migrate без создания новых изображений при каждой сборке? Я предполагаю, что эти изображения занимают место, и я получать за это счет. Я предполагаю, что есть способ обновить существующее изображение в реестре артефактов поскольку есть обновленный столбец.




Ответы (1)


Вы не смотрите на образы контейнеров. Вы смотрите на слои изображения. Комбинация слоев приводит к образу контейнера. Это также могут быть артефакты для Cloud Build и т. Д.

Вы не можете напрямую изменять слой в реестре артефактов. Любые изменения, которые вы вносите в создание изображения, приведут к изменению одного или нескольких слоев, а в результате - к созданию одного или нескольких новых слоев. Создание изображения обычно не приводит к изменению всех слоев. Ваше новое изображение, вероятно, является результатом использования старых и новых слоев. Слои кэшируются в реестре артефактов для будущих образов / сборок.

Одни и те же слои могут использоваться несколькими образами контейнера. Если бы Google разрешил вам изменять отдельные слои, вы бы сломали / повредили получившиеся контейнеры.

person John Hanley    schedule 04.12.2020