Tiene 3 métodos para obtener secretos para una aplicación dentro de un contenedor acoplable. Los primeros 2 involucran la configuración del acoplador. El último es hacer que sus aplicaciones busquen directamente secretos de una tienda secreta.
1 - Variables de entorno
Según la guía "The 12 Factor App" , los secretos son meramente config, y siempre deben establecerse en el entorno. Puede configurar sus secretos como variables de entorno durante la ejecución de la ventana acoplable, y su aplicación accede a ellos desde allí.
2 - Volúmenes montados
Puede tener todos sus secretos dentro de un archivo de configuración / secretos particular, luego montarlo en su instancia como un volumen montado .
3 - Recuperar de la tienda secreta
Como se menciona en @ 030, puede usar Hashicorp Vault (o "Amazon Secrets Manager", o cualquier servicio como ese).
Su aplicación o una aplicación de sidecar pueden obtener los secretos que necesita directamente, sin tener que lidiar con ninguna configuración en el contenedor Docker. Este método le permitiría usar secretos creados dinámicamente (una característica muy atractiva de tales sistemas) y sin tener que preocuparse de que los secretos se puedan ver desde el sistema de archivos o de inspeccionar las variables env del contenedor docker.
Opinión personal
Creo que las variables env son el camino a seguir. Es más fácil de administrar, y aún puede extraerlo de una tienda secreta como Hashicorp Vault, si tiene su sistema de compilación CI extraiga los secretos durante la compilación y configúrelos cuando implemente. Obtiene lo mejor de ambos mundos y el beneficio adicional de que sus desarrolladores no necesitan escribir código de aplicación para obtener secretos. Los desarrolladores deben centrarse en la funcionalidad de su código y no en las tareas administrativas, como buscar contraseñas.
El código de su aplicación debe centrarse en la funcionalidad de su propia aplicación y no en tareas de backend como recuperar contraseñas. Al igual que los estados de la aplicación 12 Factor.
Editar: se modificó la última oración para eliminar la implicación del desarrollador frente al silo de SysAdmin. Las tareas en sí mismas deben estar separadas de la perspectiva del código, pero DevOps trata de las mismas personas teniendo en cuenta a ambos y no debe limitarse.
Opinión personal (actualización)
Según el excelente comentario de @Dirk ( Pasando secretos a un contenedor Docker ), hay un argumento muy fuerte para priorizar una tienda secreta sobre ENV vars, debido a que no quieren filtrarlos.