gcloud перестраивает полный контейнер, но Dockerfile такой же, только скрипт изменился - PullRequest
0 голосов
/ 15 апреля 2020

Я создаю Docker контейнеры, используя gcloud:

gcloud builds submit --timeout 1000 --tag eu.gcr.io/$PROJECT_ID/dockername Dockerfiles/folder_with_dockerfile

Последние 2 шага Dockerfile содержат это:

COPY script.sh .
CMD bash script.sh

Многие из изменений, которые я хочу протестировать, в сценарии. Таким образом, Dockerfile остается без изменений. Построение этих Docker файлов на Linux с Docker -композицией приводит к очень быстрой сборке, поскольку она обнаруживает, что ничего не изменилось. Однако, делая это на gcloud, я замечаю, что полный Docker был заново сгенерирован, тогда как в скрипте было создано лишь незначительное изменение. sh.

Есть ли способ предотвратить такое поведение?

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

Ваша локальная сборка быстрая , потому что у вас уже есть все кэшированные удаленные ресурсы локально.

Похоже, использование kaniko-cache значительно ускорит вашу сборку. (см. https://cloud.google.com/cloud-build/docs/kaniko-cache#kaniko -build ).

Чтобы включить кэш в вашем проекте, запустите

gcloud config set builds/use_kaniko True

При первом создании контейнера он будет заполнять кэш (на 6 часов по умолчанию), а остальное будет быстрее, так как зависимости будут кэшироваться.

Если вам нужно еще больше ускорить сборку, я бы использовал два контейнера и в моем * обоих локальный реестр контейнеров GCP:

  • Первый в качестве кэша с всеми удаленными зависимостями (OS / language / framework / et c).
  • второй - тот, который вам нужен, просто скопируйте и CMD, используя контейнер кеша в качестве базы.
1 голос
/ 15 апреля 2020

На самом деле, gcloud имеет для выполнения лот :

Команда gcloud builds submit:

  • сжимает код приложения, Dockerfile и любой другой другие ресурсы в текущем каталоге, обозначенные .;
  • , загружают файлы в хранилище;
  • инициирует сборку с использованием загруженных файлов в качестве входных данных; теги
  • изображение с использованием предоставленного имени;
  • отправляет встроенный образ в реестр контейнеров.

Поэтому процесс комплексной сборки может занять много времени.

Рекомендуются методы для ускорения сборок , такие как:

  • создание более простых контейнеров;
  • с использованием функций кэширования;
  • с использованием собственной высокопроизводительной виртуальной машины;
  • исключая ненужные файлы из загрузки.

Они могут оптимизировать весь процесс сборки.

...