Как остановить `gcloud component update` от сохранения резервной копии? - PullRequest
3 голосов
/ 24 марта 2020

Я создаю базовый образ google-cloud-sdk и пытаюсь сохранить его стройным.

ARG GCLOUD_SDK_VERSION=285.0.1-alpine
FROM google/cloud-sdk:$GCLOUD_SDK_VERSION

# Install Java 8 for Datastore emulator
RUN apk add --update --no-cache \
        openjdk8-jre
RUN gcloud components install \
        cloud-datastore-emulator \
        pubsub-emulator \
        beta \
        --quiet
...

Пока все в порядке. И когда я строю и смотрю на вывод команды gcloud components install, я чувствую себя уверенно:

┌──────────────────────────────────────────────────┐
│       These components will be installed.        │
├──────────────────────────┬────────────┬──────────┤
│           Name           │  Version   │   Size   │
├──────────────────────────┼────────────┼──────────┤
│ Cloud Datastore Emulator │      2.1.0 │ 18.4 MiB │
│ Cloud Pub/Sub Emulator   │ 2019.09.27 │ 34.9 MiB │
│ gcloud Beta Commands     │ 2019.05.17 │  < 1 MiB │
└──────────────────────────┴────────────┴──────────┘

Мой окончательный размер изображения, однако, шокирует: 1,11 ГБ. Когда я просматриваю историю docker, я вижу, что при установке компонента фактически было выделено 654 МБ для окончательного размера образа:

CREATED BY                                      SIZE
/bin/sh -c gcloud components install        …   654MB
/bin/sh -c apk add --update --no-cache      …   78.2MB

В настоящее время я предполагаю, что это как-то связано с последней строкой процесса установки.

╔════════════════════════════════════════════════════════════╗
╠═ Creating backup and activating new installation          ═╣
╚════════════════════════════════════════════════════════════╝

Кажется, это неплохо иметь на локальной рабочей станции, но не на изображении docker. Я попытался выяснить, могу ли я деактивировать эту резервную копию или удалить ее позже. Не было никакого полезного параграфа на страницах руководства, и поиск в Интернете всегда подсказывает мне некоторые процедуры резервного копирования в облачную базу данных, которые вы можете инициировать с помощью команд gcloud.

Кто-нибудь еще знает о том, что здесь происходит? Может быть, это не резервная копия вообще, которая вносит вклад в большинство накладных расходов?

Ответы [ 2 ]

2 голосов
/ 25 марта 2020

Сначала я хочу поблагодарить @gso_gabriel за его предложения. Я закончил анализом использования файловой системы до и после вызова gcloud components install.

  1. Избавиться от резервной копии оказалось легко. В папке приложения gcloud есть скрытая, скрытая папка .install/.backup, которой не было в начале и которая занимала около 270 МБ после установки компонента.
  2. При установке компонентов также оставалось множество папок __pycache__ в сумме до 100 МБ.

Чтобы уменьшить общий размер изображения, я обновил соответствующую строку docker до:

RUN gcloud components install \
        cloud-datastore-emulator \
        pubsub-emulator \
        beta \
        --quiet \
    && rm -rf $(find google-cloud-sdk/ -regex ".*/__pycache__") \
    && rm -rf google-cloud-sdk/.install/.backup

Улучшение можно увидеть с помощью docker history:

CREATED BY                                      SIZE
/bin/sh -c gcloud components install        …   317MB

Сокращение более 300 МБ. Я протестировал образ, используя его в качестве хранилища данных и службы pubsub для одного из моих приложений, выполнив его юнит-тесты. Кажется, все по-прежнему работает хорошо.

Возможно, есть и другие файлы, которые можно почистить, но я думаю, что я уже получил тяжелые веса.

2 голосов
/ 24 марта 2020

Во-первых, я бы порекомендовал вам запустить команду gcloud components list, чтобы получить полный список компонентов, которые доступны и в настоящее время установлены в вашем SDK - таким образом, вы сможете проверить, какой из них получает весь этот размер в вашей установке.

Кроме того, как указано в документации Установка Cloud SDK Docker образ :

Cloud SDK Docker Изображение по существу, Cloud SDK устанавливается поверх образа ОС на основе Debian.

Это означает, что, вероятно, часть размера относится к ОС, используемой для установки.

Я бы хотел бы также сообщить вам, что невозможно создать резервную копию во время создания образа docker.

По этой причине, возможно, стоило бы связаться напрямую с Google, подняв Запрос о функции , чтобы это можно было проверить в будущем - что было бы неплохо, чтобы иметь лучший контроль над компонентами, такими как резервная копия, образ не будет таким большим.

Дайте мне знать, помогла ли вам информация!

...