В моей повседневной работе есть как минимум четыре среды, в которых может выполняться мой код: среда разработки моего рабочего стола, ориентированная на разработчика среда контейнеров, а также среды подготовки и производства контейнеров. Все четыре из этих сред могут иметь разные значения для таких вещей, как имена хостов. Это означает, что они должны быть каким-либо образом настраиваемыми.
Если вы жестко закодировали localhost
в качестве имени хоста в исходном коде приложения, оно не будет работать ни в какой среде, кроме вашей системы разработки, и ее необходимо изменить на конфигурационную опцию.
С точки зрения чистого Docker сделать их настраиваемыми с помощью переменных среды проще всего (и Spring может устанавливать значения свойств из переменных среды). ). В Spring также существует понятие профиля , которое в принципе соответствует концепции наличия разных настроек для разных сред, но внедрение конфигурации целого профиля может быть немного сложнее во время развертывания.
Другая практика, которую я нашел полезной, заключается в том, чтобы настройки переменных среды по умолчанию были приемлемыми для разработчиков. Подготовительные и производственные развертывания все в значительной степени написаны по сценарию, и поэтому есть достаточно веская гарантия, что им будут установлены все правильные переменные среды. Если $PGHOST
по умолчанию равно localhost
, то это правильно для разработчика, не являющегося Docker, и все настройки на основе контейнеров могут установить соответствующее значение для их среды во время развертывания.
Даже если наш фактический Система развертывания основана на контейнерах (через Kubernetes). Я занимаюсь повседневной разработкой в среде, которая в основном не Docker. Я могу запустить отдельный микросервис, запустив его из командной строки, возможно, с настройкой некоторых переменных среды, и у служб есть модульные тесты, которые могут запускаться только на извлеченном дереве исходных текстов, без необходимости какого-либо Docker. Вторым шагом является создание образа и его развертывание в среде разработки, и наша система CI выполняет интеграционные тесты с созданными ими образами.