Trabajar en Docker puede resultar un reto para algunos desarrolladores, en especial si se incluye el proceso de configuración de un dockerfile.
Primero, puede resultar conveniente saber qué es precisamente una imagen de Docker. En un artículo de AWS las definen como “un archivo ejecutable e independiente que se utiliza para crear un contenedor. Esta imagen de contenedor contiene las bibliotecas, las dependencias y los archivos que el contenedor necesita para ejecutarse”.
No es posible ver directamente el Dockerfile
original de una imagen a menos que el autor lo haya hecho público (por ejemplo, en Docker Hub o en un repositorio de GitHub). Sin embargo, sí puedes reconstruir parcialmente los pasos que se usaron para crear la imagen, utilizando herramientas de línea de comandos.
docker history
para inspeccionar la imagen
Este comando muestra el historial de capas de la imagen y los comandos usados en su construcción:
docker history --no-trunc nombre-de-la-imagen
Podrás ver instrucciones como RUN
, COPY
o CMD
, aunque de forma simplificada. Esto no genera un Dockerfile completo, pero te da una buena idea de cómo se armó la imagen.
dive
Dive es una herramienta de código abierto que permite explorar cada capa de la imagen, ver los archivos añadidos y analizar el tamaño de cada cambio.
Instálalo y ejecútalo así:
dive nombre-de-la-imagen
Ideal para entender cómo está estructurada una imagen o auditar imágenes de terceros.
Muchas imágenes en Docker Hub incluyen enlaces a su repositorio en GitHub, donde suelen publicar el Dockerfile original.
Por ejemplo, la imagen oficial de NGINX en Docker Hub: https://hub.docker.com/_/nginx apunta a este repositorio: https://github.com/nginxinc/docker-nginx
Ahí puedes encontrar el Dockerfile en el directorio raíz o en carpetas como /docker
.
Aunque puedes reconstruir gran parte de los pasos de construcción de una imagen, hay cosas que no podrás recuperar, como:
ARG
usados en tiempo de build.dockerignore
Para encontrar o reconstruir el Dockerfile de una imagen:
docker history
para ver comandos por capadive
para entender el contenido de cada layer
¿Necesitas ayuda para auditar imágenes existentes, migrar contenedores o diseñar un Dockerfile más eficiente y seguro? En Rootstack ayudamos a equipos de desarrollo a modernizar su infraestructura Docker y optimizar sus flujos DevOps. Hablemos hoy.