У вас есть 3 способа получить секреты для приложения внутри контейнера докера. Первые 2 связаны с настройкой докера. Последнее, что ваши приложения должны напрямую получать секреты из секретного магазина.
1 - переменные среды
Согласно руководству "12 Factor App" , секреты являются просто конфигурацией, и их всегда следует устанавливать в среде. Вы можете установить свои секреты в качестве переменных среды во время запуска докера, и ваше приложение получит к ним доступ оттуда.
2 - Установленные объемы
Вы можете хранить все свои секреты в определенном файле конфигурации / секретов, а затем монтировать их в свой экземпляр как смонтированный том .
3 - выборка из секретного магазина
Как упоминалось в @ 030, вы можете использовать Hashicorp Vault (или «Amazon Secrets Manager», или любую другую подобную службу).
Ваше приложение или дополнительное приложение могут напрямую получать секреты, в которых оно нуждается, без необходимости конфигурирования контейнера Docker. Этот метод позволит вам использовать динамически создаваемые секреты (очень привлекательная особенность таких систем) и не нужно беспокоиться о секретах, которые можно просматривать из файловой системы или проверять переменные env контейнера docker.
Личное мнение
Я считаю, что переменные env - это путь. Управлять им проще, и вы все равно можете извлечь из секретного хранилища, такого как Hashicorp Vault, если у вас есть система сборки CI, извлекайте секреты во время сборки и устанавливайте их при развертывании. Вы получаете лучшее из обоих миров и дополнительное преимущество ваших разработчиков, которым не нужно писать код приложения для извлечения секретов. Разработчики должны быть сосредоточены на функциональности своего кода, а не на задачах администратора, таких как получение паролей.
Код вашего приложения должен быть сосредоточен на самой функциональности его собственного приложения, а не на решении внутренних задач, таких как получение паролей. Так же, как говорится в 12 факторах приложения.
Редактировать: изменено последнее предложение, чтобы убрать следы силовых разработок против SysAdmin. Сами задачи должны быть отделены от перспективы кода, но DevOps - это примерно одни и те же лица, которые должны учитывать и не ограничиваться
Личное мнение (обновление)
Прекрасный комментарий Пер @ Дирка ( Передача секретов в контейнер Docker ), есть очень веский аргумент для того, чтобы расставить приоритеты в секретном хранилище, а не в ENV, из-за нежелания их утечки.