Я хотел бы создать контейнер Docker, а затем запустить его в GKE после монтирования некоторых каталогов с постоянных дисков (PD) GCE. Например, я бы хотел, чтобы файлы конфигурации приложения (чтение-запись) в /etc/<application>/
чтобы жить дольше, чем его стручки (которые могут перезапуститься в любой момент).
Обычная сборка помещает файлы конфигурации по умолчанию в /etc/<application>/
и крайне важно, чтобы они были как-то однажды «скопированы» с временного диска образа в PD, чтобы приложение могло запуститься в ожидаемой среде.
Есть ли лучший способ сделать это? Например, нужно ли мне монтировать PD также в моем Dockerfile
, или я могу каким-то образом запросить «синхронизацию» PD с файлами из другого каталога / тома / диска, когда они впервые монтируются экземпляром виртуальной машины во время развертывания?
Очевидный ответ - заполнять каждый постоянный диск сразу после его создания.
Если конфигурации приложения меняются от сборки к сборке и должны соответствовать запущенной сборке, то остается нерешенная проблема, что делать, если несколько версий приложения используют один и тот же PD и конфликтуют из-за того, что следует там хранить.
Если вам не нужно беспокоиться о совместном использовании PD между версиями, вы можете инициализировать содержимое PD, используя задание, выполняемое в модуле приложения. В Kubernetes есть функция под названием контейнеры инициализации разработан, чтобы сделать это проще; но на момент написания он все еще альфа.
Я не слышал о передовых методах работы, поэтому сейчас принял следующее:
docker build
изображение с Dockerfile
это также смолы, например /etc/<application>/
в <application>.tar
после того, как он выполнил другие шаги сборкиdocker run
изображение и scp
tar файлы с работающего образаscp
tar-файлы в экземпляр ВМ; gcloud compute ssh
в tit, смонтируйте PD и распакуйте необходимые файлы ниже точки монтирования