Обновление экземпляра облачных вычислений Google
У меня есть веб-сайт, развернутый с использованием образа докера внутри экземпляра вычислений Google.
Я не могу обновить экземпляр облака Google новым изображением. Обновление вычислительного экземпляра новым образом докера и запуск контейнера ничего не меняют.
Вот шаги, которые я предпринимаю для обновления экземпляра вычислений Google:
docker build -t vue_app -f deploy/web/Dockerfile . --tag gcr.io/namesapi-1581010760883/vue-app:v1
docker push gcr.io/namesapi-1581010760883/vue-app:v1
gcloud compute instances update-container --container-image=gcr.io/namesapi-1581010760883/vue-app:v1 vue-app-vm
Итак, в первой строке я создаю образ, содержащий веб-сайт и http-сервер. Я запустил его локально и могу подтвердить, что изображение работает и содержит все ожидаемые изменения.
Следующая строка отправляет изображение в облако Google, а последняя третья строка должна обновить существующий экземпляр вычислений Google новым изображением.
После запуска ни одно из изменений не отражается в экземпляре. Я захожу на сайт, размещенный на экземпляре, и вижу, что ничего не изменилось. Я проделывал эти же шаги много раз, и до недавнего времени все работало нормально. Что мне не хватает?
2 ответа
Решил вопрос. Для дальнейшего использования запустите следующие
gcloud compute instances update-container --container-image=gcr.io/namesapi-1581010760883/vue-app:v1 vue-app-vm
не заменяет существующее изображение в экземпляре, вместо этого он создает новое изображение. Итак, через какое-то время в экземпляре накапливается ряд изображений:
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/namesapi-1581010760883/vue-app v1 d21bd8939323 9 days ago 394MB
gcr.io/namesapi-1581010760883/vue-app <none> c136b1c9e0d4 13 days ago 387MB
gcr.io/namesapi-1581010760883/vue-app <none> b1b11f2c9678 4 weeks ago 385MB
gcr.io/namesapi-1581010760883/vue-app <none> a5ef94db2438 4 weeks ago 385MB
gcr.io/namesapi-1581010760883/vue-app <none> 23b52253c060 6 weeks ago 385MB
gcr.io/namesapi-1581010760883/vue-app <none> cb03925836a7 2 months ago 384MB
gcr.io/gce-containers/konlet v.0.9-latest da64965a2b28 19 months ago 73.4MB
gcr.io/stackdriver-agents/stackdriver-logging-agent 0.2-1.5.33-1-1 fcfafd404600 22 months ago 548MB
Я думаю, что в моем случае произошло то, что в вычислительном экземпляре закончилось место на диске, и новый образ не был загружен при выполнении указанной выше команды. Облачный API Google не выдавал предупреждений или чего-то подобного, поэтому это было сложно понять.
Решили эту проблему, войдя в экземпляр вручную и удалив старые изображения, а затем повторив шаги в исходном вопросе.
Спасибо @RaidasGrisk!
Эта проблема безумная
Вы можете создать свой экземпляр с помощью сценария запуска, который очистит неиспользуемые образы докеров:
gcloud compute instances create-with-container my-instance \
--machine-type f1-micro \
--metadata startup-script='#! /bin/bash
# Clear old Docker images
docker image prune -af' \
--zone us-central1-a \
--container-image gcr.io/my-project/my-image
Кроме того, вы можете удалить неиспользуемые образы Docker со своего компьютера с помощью клиента gcloud:
# Only the first time
gcloud compute config-ssh
gcloud compute ssh --verbosity=debug my-instance --command "docker image prune -af"