Gestión y construcción de imágenes en Docker

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:

  1. Modificar un contenedor en ejecución y confirmar los cambios (commit).
  2. 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.

  1. Inicie un contenedor interactivo: ``` $ docker run -it ubuntu:22.04 /bin/bash
  2. Realice modificaciones (por ejemplo, instalar una utilidad): ```

    apt-get update && apt-get install -y curl

    exit

  3. 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.

Etiquetas: Docker containers DevOps dockerfile Sysadmin

Publicado el 6-20 22:32