Cuando se inicia un contenedor, Docker verifica si la imagen solicitada está disponible localmente. En caso de no encontrarla, el demonio de Docker la descarga automáticamente desde un registro, siendo Docker Hub el repositorio público configurado por defecto.
Visualización de imágenes locales
Para inspeccionar las imágenes que residen en el sistema anfitrión, se utiliza el comando docker images.
$ docker images
La salida de este comando organiza la información en varias columnas clave:
- REPOSITORY: El nombre del repositorio de la imagen.
- TAG: La etiqueta o versión específica de la imagen.
- IMAGE ID: Identificador único del objeto.
- CREATED: Tiempo transcurrido desde su creación.
- SIZE: Espacio en disco que ocupa la imagen.
Es común que un mismo repositorio contenga múltiples versiones diferenciadas por etiquetas (tags). Por ejemplo, en el repositorio de debian pueden coexistir versiones como bullseye o buster. Si se desea ejecutar una versión específica, se debe emplear el formato nombre:etiqueta:
$ docker run -it debian:bullseye /bin/bash
Si se omite la etiqueta al invocar la imagen, Docker asumirá por defecto el uso de la etiqueta latest.
Obtención de nuevas imágenes
Aunque Docker descarga imágenes automáticamente al ejecutar contenedores, es posible realizar una descarga previa mediante el comando pull. Esto es útil para preparar el entorno antes de desplegar aplicaciones.
$ docker pull alpine:3.18
Búsqueda de imágenes en el registro
Para loaclizar imágenes específicas sin salir de la terminal, se puede recurrir al comando docker search. Por ejemplo, si se requiere un servidor de bases de datos como MariaDB:
$ docker search mariadb
El resultado mostrará el nombre del repositorio, una breve descripción y si se trata de una imagen oficial avalada por Docker.
Descarga y despliegue rápido
Una vez identificada la imagen necesaria, el flujo estándar consiste en descargarla y posteriormente iniciar el contenedor:
$ docker pull nginx:alpine
$ docker run -d -p 80:80 nginx:alpine
Métodos para la creación de imágenes personalizadas
Cuando las imágenes estándar no cumplen con los requisitos de un proyecto, existen dos rutas principales para personalizarlas:
- Modificar un contenedor en ejecución y confirmar los cambios (commit).
- Definir la infraestructura mediante un archivo de configuración llamado
Dockerfile.
Actualización de imágenes mediante Commmit
Este método consiste en realizar cambios manuales dentro de un contenedor y guardarlos como una nueva capa.
- Inicie un contenedor interactivo: ```
$ docker run -it ubuntu:22.04 /bin/bash
- Realice modificaciones (por ejemplo, instalar una utilidad): ```
apt-get update && apt-get install -y curl
exit
- Persista los cambios en una nueva imagen utilizando el ID del contenedor: ```
$ docker commit -m "Instalación de curl" -a "sysadmin" a1b2c3d4e5f6 mi_usuario/ubuntu_custom:v1
Construcción automatizada con Dockerfile
El uso de docker build junto con un Dockerfile es la práctica recomendada para entornos de producción, ya que permite la reproducibilidad y el control de versiones.
A continuación, un ejemplo de un Dockerfile sencillo basado en Alpine Linux:
FROM alpine:latest
LABEL maintainer="admin@tech.com"
RUN apk add --no-cache python3 py3-pip
WORKDIR /app
COPY . /app
EXPOSE 8080
CMD ["python3", "-m", "http.server", "8080"]
Para generar la imagen a partir de este archivo, se ejecuta el siguiente comando en el directorio donde se encuentra el Dockerfile:
$ docker build -t servidor_web:1.0 .
El parámettro -t asigna el nombre y la etiqueta, mientras que el punto final indica el contexto de construcción.
Asignación de etiquetas adicionales
Es posible añadir alias o etiquetas secundarias a una imagen existente para facilitar su gestión o integrarla en diferentes flujos de despliegue mediante el comando tag.
$ docker tag d1e2f3g4h5i6 mi_repositorio/app_backend:testing
Este comando vincula el ID de la imagen con una nueva estructura de nombre y etiqueta, facilitando su posterior carga (push) a registros privados o públicos.