Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a utilizar el comando docker container diff para inspeccionar cambios en el sistema de archivos dentro de un contenedor Docker. Comenzaremos ejecutando un contenedor simple de Nginx y luego usaremos docker container diff para examinar las modificaciones iniciales del sistema de archivos realizadas al crear el contenedor.

Después de la inspección inicial, realizarás cambios dentro del contenedor en ejecución. Finalmente, volverás a usar docker container diff para observar y comprender las diferencias en el sistema de archivos resultantes de estas modificaciones. Este ejercicio práctico te proporcionará experiencia en el uso de este valioso comando de Docker para depurar y entender el comportamiento de los contenedores.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") subgraph Lab Skills docker/run -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} docker/ps -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} docker/rm -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} docker/exec -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} docker/inspect -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} docker/pull -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} docker/images -.-> lab-555107{{"Cómo usar el comando docker container diff para inspeccionar cambios en el sistema de archivos del contenedor"}} end

Ejecutar un contenedor Nginx

En este paso, aprenderemos cómo ejecutar un servidor web Nginx simple dentro de un contenedor Docker. Docker nos permite empaquetar aplicaciones y sus dependencias en contenedores, garantizando que se ejecuten de manera consistente en diferentes entornos.

Primero, debemos asegurarnos de que la imagen de Nginx esté disponible en nuestro sistema. Podemos descargar la imagen oficial de Nginx desde Docker Hub usando el comando docker pull. Este comando descarga la imagen a tu máquina local.

docker pull nginx:latest

Deberías ver una salida que indica que la imagen se está descargando. Una vez completada la descarga, puedes verificar que la imagen está disponible listando las imágenes en tu sistema:

docker images

Deberías ver nginx listado en la salida.

Ahora, ejecutemos el contenedor Nginx. Usaremos el comando docker run. La bandera -d ejecuta el contenedor en modo desatendido (en segundo plano), y la bandera -p 80:80 mapea el puerto 80 en nuestra máquina host al puerto 80 dentro del contenedor. Esto nos permite acceder al servidor web Nginx desde nuestro navegador host. También asignamos un nombre al contenedor usando --name my-nginx-container para facilitar su identificación.

docker run -d -p 80:80 --name my-nginx-container nginx

Después de ejecutar el comando, Docker mostrará una cadena larga, que es el ID del contenedor. Esto indica que el contenedor se ha iniciado correctamente en segundo plano.

Para verificar que el contenedor está en ejecución, puedes usar el comando docker ps, que lista todos los contenedores en ejecución:

docker ps

Deberías ver my-nginx-container listado con un estado de Up.

Finalmente, accedamos al servidor web Nginx desde nuestra máquina host. Como mapeamos el puerto 80, podemos usar curl para hacer una solicitud HTTP a localhost en el puerto 80.

curl localhost

Deberías ver el HTML de la página de bienvenida predeterminada de Nginx en la salida. Esto confirma que el contenedor Nginx está en ejecución y accesible.

Inspeccionar cambios iniciales en el sistema de archivos usando docker container diff

En este paso, exploraremos cómo inspeccionar los cambios en el sistema de archivos que ocurren cuando se inicia un contenedor Docker. Docker utiliza un sistema de archivos por capas, y cuando se ejecuta un contenedor, se añade una nueva capa escribible sobre las capas de la imagen. El comando docker container diff nos permite ver las diferencias introducidas en esta capa escribible desde que se creó el contenedor.

El comando docker container diff toma como argumento el nombre o ID del contenedor. Usaremos el nombre del contenedor Nginx que iniciamos en el paso anterior: my-nginx-container.

docker container diff my-nginx-container

Cuando ejecutes este comando inmediatamente después de iniciar el contenedor, probablemente verás una lista de archivos y directorios. La salida muestra los cambios en el sistema de archivos del contenedor en relación con la imagen base. El formato de la salida es típicamente:

  • A indica que se añadió un archivo o directorio.
  • C indica que se modificó un archivo o directorio.
  • D indica que se eliminó un archivo o directorio.

Los cambios iniciales que observes suelen estar relacionados con el proceso de inicio del contenedor, como la creación de archivos temporales, archivos de registro o cambios en directorios del sistema. Estos son los archivos y directorios que se crean o modifican en la capa escribible del contenedor cuando se inicia.

Comprender estos cambios iniciales nos ayuda a ver qué ocurre internamente cuando se lanza un contenedor y cómo se llena la capa escribible.

Realizar cambios dentro del contenedor

En este paso, realizaremos algunos cambios en el sistema de archivos dentro del contenedor Nginx en ejecución. Esto demostrará cómo las modificaciones dentro de un contenedor se registran en su capa escribible.

Utilizaremos el comando docker exec para ejecutar comandos dentro del contenedor. El comando docker exec nos permite ejecutar un comando en un contenedor en ejecución. Necesitamos especificar el nombre del contenedor (my-nginx-container) y el comando que queremos ejecutar.

Primero, creemos un nuevo archivo dentro del directorio /tmp del contenedor. Usaremos el comando touch.

docker exec my-nginx-container touch /tmp/my_new_file.txt

Este comando ejecuta touch /tmp/my_new_file.txt dentro del my-nginx-container. No verás ninguna salida si el comando se ejecuta correctamente.

A continuación, modifiquemos el archivo index predeterminado de Nginx. La página de bienvenida predeterminada de Nginx se encuentra típicamente en /usr/share/nginx/html/index.html dentro del contenedor. Usaremos el comando echo para añadir texto a este archivo.

docker exec my-nginx-container echo "<h1>Hello from LabEx!</h1>" >> /usr/share/nginx/html/index.html

Este comando añade la cadena HTML "

Hello from LabEx!

" al archivo index.html dentro del contenedor.

Para verificar que los cambios se han realizado, puedes usar nuevamente curl desde tu máquina host para acceder al servidor Nginx.

curl localhost

Ahora deberías ver el contenido original de la página de bienvenida de Nginx seguido de "

Hello from LabEx!

". Esto confirma que el archivo index.html dentro del contenedor ha sido modificado.

Estos cambios que realizamos (crear un nuevo archivo y modificar uno existente) se registran en la capa escribible del my-nginx-container. En el siguiente paso, usaremos docker container diff nuevamente para ver estos cambios específicos.

Inspeccionar cambios actualizados en el sistema de archivos usando docker container diff

En este paso final, usaremos nuevamente el comando docker container diff para observar los cambios en el sistema de archivos que realizamos en el paso anterior. Esto mostrará claramente cómo nuestras acciones dentro del contenedor se reflejan en su capa escribible.

Recordemos que en el paso anterior creamos un nuevo archivo /tmp/my_new_file.txt y modificamos el archivo /usr/share/nginx/html/index.html dentro del my-nginx-container. Ahora, ejecutemos nuevamente docker container diff en el contenedor.

docker container diff my-nginx-container

Esta vez, la salida debería incluir los cambios que realizamos. Deberías ver líneas similares a estas:

A /tmp/my_new_file.txt
C /usr/share/nginx/html/index.html

La línea A /tmp/my_new_file.txt indica que se Añadió un nuevo archivo llamado my_new_file.txt en el directorio /tmp.
La línea C /usr/share/nginx/html/index.html indica que el archivo index.html en el directorio /usr/share/nginx/html/ fue Cambiado.

Esta salida confirma que docker container diff muestra efectivamente las modificaciones realizadas al sistema de archivos del contenedor desde su inicio. Estos cambios se almacenan en la capa escribible del contenedor, que es independiente de las capas de la imagen base. Este es un concepto fundamental en el sistema de archivos por capas de Docker y cómo los contenedores mantienen su estado.

Cuando se elimina el contenedor, esta capa escribible también se elimina, y todos los cambios realizados dentro del contenedor se pierden a menos que se persistan usando volúmenes o montajes bind (que son temas para otro laboratorio).

Para limpiar, puedes detener y eliminar el contenedor:

docker stop my-nginx-container
docker rm my-nginx-container

Esto concluye nuestra exploración de docker container diff. Has aprendido cómo inspeccionar los cambios iniciales en el sistema de archivos cuando un contenedor inicia y cómo ver los cambios que realizas dentro de un contenedor en ejecución.

Resumen

En este laboratorio, aprendimos cómo ejecutar un contenedor simple de Nginx usando docker run, asegurando su accesibilidad mediante mapeo de puertos y verificando su estado con docker ps. Luego exploramos el comando docker container diff para inspeccionar los cambios iniciales en el sistema de archivos introducidos por las capas de la imagen del contenedor al crearse.

Posteriormente, practicamos realizando modificaciones dentro del sistema de archivos del contenedor en ejecución y utilizamos nuevamente docker container diff para observar y comprender cómo Docker rastrea y refleja estos cambios, destacando la utilidad del comando para identificar diferencias entre el estado actual del contenedor y su imagen base.