Cómo empaquetar imágenes de Docker con Python
La gente suele decir: "¡No reinventes la rueda!"
Cuando utilices Docker, es mejor buscar primero algunas imágenes que puedan usarse directamente en Docker Hub para que puedas Puedes construir tu propia práctica antes de tomar imágenes. Distribuir la arquitectura de software en una serie de contenedores, cada uno de los cuales hace una sola cosa, funciona muy bien. El mejor componente básico para crear aplicaciones distribuidas es utilizar imágenes oficiales de Docker Hub porque puede confiar en su calidad.
En algunos casos puede ser conveniente que un contenedor haga dos cosas diferentes. En otros casos, es posible que desee que una imagen de Docker contenga bibliotecas dependientes de dos imágenes diferentes. Esto es muy sencillo si tienes un Dockerfile para cada imagen. Simplemente organícelos en un Dockerfile y compílelos.
Sin embargo, la mayoría de las veces uso imágenes que están listas en Docker Hub y no tienen sus Dockerfiles de origen.
Imagen 1 --
\
---gt; merged_image_12
/
Imagen 2 - -
Hubo dos discusiones relacionadas (1, 2) en GitHub antes, pero se cerraron.
¿Es esto posible?
Entonces, ¿existe alguna herramienta que pueda hacer algo como: Docker merge image2 image2 merged_image?
Ni siquiera puedes crear un Dockerfile de la siguiente manera:
DESDE imagen1
DESDE imagen2
En resumen, puedes No crear un Dockerfile en un Utilice varias imágenes base en un Dockerfile.
¡Pero necesito esta característica!
La única solución es obtener el Dockerfile de estas imágenes y organizarlas en un archivo antes de compilarlas. Entonces, ¿puedo obtener el Dockerfile de la imagen en Docker Hub? Afortunadamente, puedes hacerlo. No está disponible sin conexión (Nota del traductor: el artículo original está en línea, pero aparentemente puede obtener la imagen creada automáticamente directamente desde GitHub en línea), pero puede realizar ingeniería inversa usando el comando Docker History.
¿Cómo utilizar?
Utilice Docker Pull en su máquina para descargar la imagen desde Docker Hub.
docker pull image1
docker pull image2
Luego use el historial de Docker para obtener los comandos que se ejecutaron al crear los dos contenedores.
historial de Docker --no-trunc=true image gt; image1-dockerfile
historial de Docker --no-trunc=true image2 gt; > A continuación, abra estos dos archivos y podrá ver la pila de comandos para cada imagen.
Esto se debe a que las imágenes de Docker se crean a través de capas (leer más). Es decir, cada comando que escribe en Dockerfile crea una nueva imagen encima de la imagen producida por el comando anterior. Por lo tanto, puede aplicar ingeniería inversa a la imagen.
Limitaciones
El único momento en el que no se puede aplicar ingeniería inversa a una imagen es si el mantenedor de la imagen utiliza los comandos AGREGAR o COPIAR en su Dockerfile. Verá una línea como esta:
AÑADIR archivo: 1ac56373f7983caf22
o AGREGAR directorio: cf6fe659e9d21535844
Esto se debe a que no sabemos que el mantenedor está activado. su propia máquina Qué archivos locales se utilizan, incluidos en la imagen.