Imagenes en Docker

David Guzman Lopez

Una Imagen Docker es una plantilla de solo lectura que contiene el código de la aplicación, las librerías y todas las dependencias necesarias para que una aplicación se ejecute.

Introducción

Si el contenedor es la máquina virtual ligera donde se ejecuta tu aplicación, la Imagen Docker es el plano de ingeniería inmutable que le da vida. En el ecosistema de Docker, comprender cómo se construyen y se administran las imágenes es el paso más importante para crear aplicaciones portátiles y eficientes.

A diferencia de un archivo binario simple, una Imagen Docker está organizada como un sofisticado sistema de capas. En este artículo, desglosaremos la estructura interna de una imagen, aprenderemos a construirla con un Dockerfile y, finalmente, cómo distribuirla para que otros puedan usar tu trabajo.


¿Qué es una Imagen Docker?

Una imagen no es un bloque monolítico; es una pila de archivos organizados en capas de datos distintos (distribución, software, librerías y personalización). Este enfoque de capas es lo que hace a Docker tan rápido y eficiente en términos de espacio en disco.

La Estructura de las Capas

Podemos concluir que una imagen se conforma de distintas capas de personalización, todas basadas en una Capa Inicial o Base Image.

  • Base Image (Capa Inicial): Es el estado más puro del sistema operativo (SO). Si utilizamos una distribución de Linux, la imagen base se conecta al Kernel del Host (tu máquina),
  • Capas de Personalización: Cada instrucción en el archivo de construcción de la imagen (Dockerfile) agrega una nueva capa, que es de solo lectura. Por ejemplo, se pueden apilar capas para agregar la distribución Debian , instalar el editor vim y configurar un servidor como Apache.
  • Capa Escribible (Writable Layer): Cuando la imagen se ejecuta como un Contenedor , Docker agrega una capa superior temporal que es de lectura y escritura. Cualquier cambio realizado por la aplicación (creación de logs, edición de archivos) se produce en esta capa. Importante: si el contenedor se elimina, esta capa escribible y sus cambios se pierden (a menos que se usen volúmenes)

docker image ls

veo las imágenes que tengo localmente

docker pull ubuntu:20.04

bajo la imagen de ubuntu con una versión específica

Construir imagenes en docker 

mkdir imagenes

Creo un directorio en mi máquina

cd imagenes

Entro al directorio

touch Dockerfile

creo un Dockerfile con esta estructura:

##Contenido del Dockerfile##
FROM ubuntu:latest
RUN touch /usr/src/hola-platzi.txt 
##fin##

docker build -t ubuntu:platzi .

ubuntu es la imagen de la cual voy a basarme y la nueva la voy a llamar platzi
. en el directorio actual

docker run -it ubuntu:platzi

Corro el contenedor con la nueva imagen

Sistema de capas

docker history ubuntu:platzi

veo la info de como se construyó cada capa


David Guzmán López

Ingeniero Electrónico

Electronic Engineer | DevOps Engineer | SRE | Cloud Engineer | Infrastructure Engineer