una imagen hub guardar dockers crear contenedor container acceder docker

hub - guardar una imagen en docker



¿Cómo acceder idiomáticamente a los datos confidenciales al crear una imagen de Docker? (4)

A veces es necesario utilizar datos confidenciales al crear una imagen de Docker. Por ejemplo, un token de API o una clave SSH para descargar un archivo remoto o para instalar dependencias desde un repositorio privado. Puede ser conveniente distribuir la imagen resultante y omitir las credenciales confidenciales que se usaron para construirla. ¿Cómo se puede hacer esto?

He visto docker-squash que puede aplastar varias capas en una, eliminando los archivos eliminados de la imagen final. Pero ¿hay un enfoque más idiomático?


Con respecto al enfoque idiomático, no estoy seguro, aunque la ventana acoplable todavía es bastante joven para tener demasiados modismos.

Sin embargo, hemos tenido este mismo problema en nuestra empresa. Hemos llegado a las siguientes conclusiones, aunque estos son nuestros mejores esfuerzos en lugar de las mejores prácticas establecidas de los portuarios.

1) Si necesita los valores en el momento de la compilación: proporcione un archivo de propiedades en el contexto de compilación con los valores que se pueden leer en la compilación, luego el archivo de propiedades se puede eliminar después de la compilación. Esto no es tan portátil pero hará el trabajo.

2) Si necesita los valores en tiempo de ejecución: pase valores como variables de entorno. Serán visibles para alguien que tenga acceso a ps en el cuadro, pero esto puede restringirse a través de SELinux u otros métodos (honestamente, no conozco este proceso, soy un desarrollador y los equipos de operaciones se ocuparán de esa parte). ).


La forma en que resolvemos este problema es que tenemos una herramienta escrita sobre la docker build de la docker build . Una vez que inicie una compilación utilizando la herramienta, descargará un archivo docker y lo modificará. Cambia todas las instrucciones que requieren "el secreto" a algo como:

RUN printf "secret: asd123poi54mnb" > /somewhere && tool-which-uses-the-secret run && rm /somewhere

Sin embargo, esto deja los datos secretos a disposición de cualquier persona con acceso a la imagen, a menos que la capa en sí se elimine con una herramienta como docker-squash. El comando utilizado para generar cada capa intermedia se puede encontrar usando el comando de historial


Lamentablemente, todavía no existe una solución adecuada para manejar datos confidenciales al crear una imagen de ventana acoplable.

Este error tiene un buen resumen de lo que está mal con cada truco que las personas sugieren: https://github.com/moby/moby/issues/13490

Y la mayoría de los consejos parecen confundir los secretos que deben ir EN EL contenedor con los secretos que se usan para construir el contenedor, como varias de las respuestas aquí.

Las soluciones actuales que parecen ser realmente seguras, parecen centrarse en escribir el archivo secreto en el disco o en la memoria, y luego iniciar un pequeño servidor HTTP tonto, y luego hacer que el proceso de compilación extraiga el secreto del servidor http, use Lo, y no lo guarde en la imagen.

Lo mejor que he encontrado sin tener que alcanzar ese nivel de complejidad, es (mal) usar la característica incorporada de argumentos predefinidos de archivos de compilación de docker, como se especifica en este comentario:

https://github.com/moby/moby/issues/13490#issuecomment-403612834

Eso parece mantener los secretos fuera del historial de construcción de la imagen.


Matthew Close habla de esto en este artículo del blog .

Resumido: debe utilizar la ventana acoplable compuesta para montar información confidencial en el contenedor.