run remove library images docker

remove - docker run image



docker: cómo mostrar las diferencias entre 2 imágenes (6)

Cada instrucción RUN crea un nuevo contenedor y puede inspeccionar qué cambió un contenedor utilizando docker diff <container> .

Entonces, después de compilar su archivo docker ps -a , ejecute docker ps -a para obtener una lista de los contenedores que creó el archivo de compilación. Debería verse algo así como:

CONTAINER ID IMAGE COMMAND CREATED STATUS ... 53d7dadafee7 f71e394eb0fc /bin/sh -c apt-get i 7 minutes ago Exit 0 ... ...

Ahora puedes hacer docker diff 53d7dadafee7 para ver qué ha cambiado.

Tengo un Dockerfile con una secuencia de instrucciones RUN que ejecutan "apt-get install" s; por ejemplo, un par de líneas:

RUN apt-get install -y tree RUN apt-get install -y git

Después de haber ejecutado "docker build", si luego ejecuto "docker images -a", veo la lista de todas las imágenes base-child-child -.... que se crearon durante la compilación.

Me gustaría ver una lista de todos los paquetes que se instalaron cuando se ejecutó la línea "apt-get install -y git" (incluidos los paquetes dependientes que también pueden haber sido instalados, además de los paquetes git).

Nota: Creo que el comando "docker diff" muestra las diferencias entre un contenedor y la imagen desde la que se inició. En cambio, me gustaría las diferencias entre 2 imágenes (del mismo linaje): las identificaciones de imagen "árbol" y "git". es posible?

Gracias.


Este trabajó para mí:

docker run -it e5cba87ecd29 bash -c ''find /path/to/files -type f | sort | xargs -I{} sha512sum {}'' > /tmp/dockerfiles.e5cba87ecd29.txt docker run -it b1d19fe1a941 bash -c ''find /path/to/files -type f | sort | xargs -I{} sha512sum {}'' > /tmp/dockerfiles.b1d19fe1a941.txt meld /tmp/dockerfiles*

Donde e5cba87ecd29 y b1d19fe1a941 son imágenes que me interesan y / path / to / files es un directorio que podría ser "/". Enumera todos los archivos, los ordena y agrega hash a ellos por si acaso. Y meld resalta todas las diferencias.


Mira esto :

https://github.com/GoogleCloudPlatform/container-diff

Esta herramienta puede diferenciar las imágenes del acoplador local o remoto y puede hacerlo sin requerir que se instale el acoplador. Tiene un archivo y un nivel de paquete "diferente" (por ejemplo: apt, npm y pip) para que pueda ver más fácilmente las diferencias en los paquetes que han cambiado entre dos imágenes del acoplador.

Descargo de responsabilidad: soy un colaborador de este proyecto


Mira esto:

https://github.com/moul/docker-diff

Brew instrucciones de instalación de Brew para Mac, supongo que es un script Bash, así que supongo que podría funcionar en otros entornos * nix.


Si conoce la ID o el nombre del contenedor (incluso el contenedor detenido), puede volcar rápidamente la lista de archivos sobre la marcha.

$ docker export CONTAIN_ID_OR_NAME | tar tv -rwxr-xr-x 0 0 0 0 2 6 21:22 .dockerenv -rwxr-xr-x 0 0 0 0 2 6 21:22 .dockerinit drwxr-xr-x 0 0 0 0 10 21 13:46 bin/ -rwxr-xr-x 0 0 0 1021112 10 8 2014 bin/bash -rwxr-xr-x 0 0 0 31152 10 21 2013 bin/bunzip2 -rwxr-xr-x 0 0 0 0 10 21 2013 bin/bzcat link to bin/bunzip2 lrwxrwxrwx 0 0 0 0 10 21 2013 bin/bzcmp -> bzdiff -rwxr-xr-x 0 0 0 2140 10 21 2013 bin/bzdiff lrwxrwxrwx 0 0 0 0 10 21 2013 bin/bzegrep -> bzgrep -rwxr-xr-x 0 0 0 4877 10 21 2013 bin/bzexe ......

Luego puede guardar la lista en el archivo y comparar también los archivos de la lista.

Si insiste en usar ID o nombre de imagen, puede volcar la lista de archivos de la primera capa sobre la marcha:

$ docker save alpine |tar xO ''*/layer.tar'' | tar tv drwxr-xr-x 0 0 0 0 12 27 06:32 bin/ lrwxrwxrwx 0 0 0 0 12 27 06:32 bin/ash -> /bin/busybox lrwxrwxrwx 0 0 0 0 12 27 06:32 bin/base64 -> /bin/busybox lrwxrwxrwx 0 0 0 0 12 27 06:32 bin/bbconfig -> /bin/busybox -rwxr-xr-x 0 0 0 821408 10 27 01:15 bin/busybox

Después de todo, le sugiero que inicie el contenedor y luego lo detenga, luego puede obtener una lista de archivos fusionados tal como se describe en la primera forma.

2017/02/01: la forma más rápida de mostrar la lista de archivos del contenedor, puede introducir su directorio raíz para leer archivos :

# PID=$(docker inspect -f ''{{.State.Pid}}'' CONTAIN_ID_OR_NAME) # cd /proc/$PID/root && ls -lF drwxr-xr-x 0 0 0 0 12 27 06:32 bin/ lrwxrwxrwx 0 0 0 0 12 27 06:32 bin/ash -> /bin/busybox lrwxrwxrwx 0 0 0 0 12 27 06:32 bin/base64 -> /bin/busybox lrwxrwxrwx 0 0 0 0 12 27 06:32 bin/bbconfig -> /bin/busybox -rwxr-xr-x 0 0 0 821408 10 27 01:15 bin/busybox

Tenga en cuenta que si está utilizando docker-machine, primero debe ingresarlo mediante docker-machine ssh y sudo sh .

Ahora obtiene el directorio raíz de los dos contenedores, puede usar diff para compararlos directamente.


Supongo que podría enviar los dos sistemas de archivos de imágenes a tarballs a través de docker export CONTAINERID o docker save IMAGEID (actualizado según los comentarios)

Luego, use la herramienta que desee para diferenciar los sistemas de archivos: Git, Rdiff, etc.