Cómo crear imágenes personalizadas en Docker con Dockerfile
Aprende a crear imágenes personalizadas en Docker con Dockerfile. Guía completa paso a paso y buenas prácticas.

Docker se ha convertido en una herramienta fundamental en el desarrollo y despliegue de aplicaciones, permitiendo la creación de entornos aislados y reproducibles. Sin embargo, muchas veces necesitamos más que las imágenes prediseñadas disponibles en Docker Hub, y aquí es donde entra en juego la posibilidad de construir nuestras propias imágenes personalizadas utilizando Dockerfile.
Este artículo te guiará paso a paso en la creación de imágenes personalizadas con Dockerfile, explicando desde los conceptos básicos hasta la optimización y despliegue de tus contenedores. Si alguna vez has querido entender cómo funciona realmente la construcción de imágenes en Docker, este es el lugar indicado.
¿Qué es un Dockerfile?
Un Dockerfile es un archivo de texto que contiene una serie de instrucciones que Docker interpreta para construir una imagen. Cada línea en un Dockerfile representa una capa en la imagen final, lo que permite optimizar y reutilizar partes del proceso de construcción.
Las imágenes de Docker se basan en un sistema de capas, lo que significa que cada vez que se ejecuta una instrucción dentro de un Dockerfile, se crea una nueva capa encima de la anterior. Esto permite un uso eficiente del almacenamiento y facilita la reutilización de partes de la imagen en futuras construcciones. Si deseas saber más sobre cómo optimizar el almacenamiento en tus proyectos, es recomendable investigar sobre el uso de opciones de cifrado eficiente.
Instrucciones básicas en un Dockerfile
Para crear una imagen personalizada, necesitamos conocer algunas de las instrucciones fundamentales que se pueden incluir en un Dockerfile:
- FROM: Define la imagen base sobre la que se construirá nuestra imagen personalizada. Ejemplo:
FROM ubuntu:latest
. - RUN: Permite ejecutar comandos en la imagen durante su construcción. Se utiliza para instalar paquetes o configurar la imagen. Ejemplo:
RUN apt-get update && apt-get install -y curl
. - COPY: Copia archivos desde el sistema de archivos del host a la imagen. Ejemplo:
COPY app.py /app/
. - CMD: Define el comando que se ejecutará cuando se inicie un contenedor basado en la imagen. Ejemplo:
CMD ["python3", "app.py"]
. - ENTRYPOINT: Similar a CMD, pero permite que el contenedor funcione como un ejecutable.
- ENV: Define variables de entorno dentro del contenedor. Ejemplo:
ENV APP_ENV=production
. - WORKDIR: Establece el directorio de trabajo dentro del contenedor.
- EXPOSE: Especifica los puertos que el contenedor usará.
Pasos para crear imágenes personalizadas Dockerfile
Supongamos que queremos crear una imagen para una aplicación en Python utilizando Flask. Para ello, seguiremos estos pasos:
1. Preparar el entorno
Crea una carpeta para tu aplicación y dentro de ella, un archivo Dockerfile
. También necesitarás un archivo requirements.txt
con las dependencias necesarias que tu aplicación requiera.
2. Definir el Dockerfile
Dentro del archivo Dockerfile
, escribimos lo siguiente:
FROM python:3.9 WORKDIR /app COPY requirements.txt /app/ RUN pip install -r requirements.txt COPY . /app/ CMD ["python", "app.py"]
3. Construir la imagen
Abre un terminal en la carpeta donde se encuentra el Dockerfile y ejecuta:
docker build -t mi-app .
4. Ejecutar un contenedor
Para lanzar un contenedor basado en la imagen recién creada, usa:
docker run -p 5000:5000 mi-app
Buenas prácticas en la crear imágenes personalizadas Dockerfile
- Utiliza imágenes base ligeras: Opta por imágenes minimalistas como
alpine
para reducir el tamaño de la imagen y mejorar la seguridad. - Aprovecha la caché: Ordena las instrucciones del
Dockerfile
de manera que los cambios frecuentes aparezcan al final para optimizar el uso de la caché. - Elimina archivos innecesarios: Usa
.dockerignore
para evitar copiar archivos que no se necesiten dentro del contenedor. - Minimiza el número de capas: Usa el mismo
RUN
para agrupar comandos y reducir capas innecesarias.
Cómo compartir imágenes personalizadas Dockerfile
Para compartir tu imagen con otros desarrolladores o desplegarla en un servidor, puedes subirla a Docker Hub:
1. Iniciar sesión en Docker Hub
docker login
2. Etiquetar la imagen
docker tag mi-app usuario/mi-app:v1
3. Subir la imagen
docker push usuario/mi-app:v1
Ahora cualquier persona podrá descargar y usar tu imagen con:
docker pull usuario/mi-app:v1
Construir imágenes personalizadas con Dockerfile es una de las mejores formas de mejorar el despliegue y desarrollo de aplicaciones. Siguiendo estos pasos y buenas prácticas, podrás crear imágenes eficientes, seguras y listas para ser utilizadas en entornos de producción. Comparte esta guía y ayuda a otros usuarios a usar la herramienta.