¿Qué es un Dockerfile?
Un Dockerfile es un archivo de texto que contiene todas las instrucciones necesarias para construir una imagen Docker. Cada instrucción en el Dockerfile representa un comando que Docker interpretará y utilizará para crear la imagen deseada. Las imágenes creadas a partir de un Dockerfile son base para ejecutar contenedores, que son instancias en ejecución de la imagen.
Estructura básica de un Dockerfile
Un Dockerfile sigue una serie de instrucciones básicas. A continuación se presentan algunas de las más comunes:
- FROM: Define la imagen base de la cual se parte.
- RUN: Ejecuta comandos en la imagen durante su construcción.
- CMD: Define el comando predeterminado a ejecutar cuando se inicia un contenedor.
- EXPOSE: Indica los puertos que el contenedor escuchará en tiempo de ejecución.
- COPY: Copia archivos o directorios desde el sistema de archivos del contexto de construcción a la imagen.
- WORKDIR: Establece el directorio de trabajo para las instrucciones RUN, CMD, ENTRYPOINT, COPY y ADD que siguen.
Creando un Dockerfile desde cero
A continuación, se presenta un ejemplo sencillo de un Dockerfile que crea una imagen para una aplicación Node.js. Este Dockerfile incluye las instrucciones mencionadas y sirve para ilustrar el proceso.
FROM node:14
# Establecer el directorio de trabajo
WORKDIR /usr/src/app
# Copiar los archivos de la aplicación
COPY package*.json ./
# Instalar las dependencias
RUN npm install
# Copiar el resto de archivos
COPY . .
# Exponer el puerto de la aplicación
EXPOSE 8080
# Comando para iniciar la aplicación
CMD ["node", "app.js"]
En el ejemplo anterior, comenzamos con la imagen base de Node.js versión 14. Luego, establecemos el directorio de trabajo, copiamos los archivos necesarios y ejecutamos la instalación de las dependencias. Finalmente, exponemos el puerto en el que la aplicación escuchará y definimos el comando que inicia la aplicación.
Construcción de la imagen Docker
Una vez creado el Dockerfile, se puede construir la imagen utilizando el siguiente comando:
docker build -t mi-aplicacion .
Este comando le indica a Docker que construya una nueva imagen llamada mi-aplicacion utilizando el Dockerfile en el directorio actual (indicado por el punto al final).
Mejores prácticas para Dockerfile
Al crear Dockerfiles, es importante seguir algunas mejores prácticas para optimizar el tamaño y la eficiencia de las imágenes:
- Mínima cantidad de capas: Agrupando comandos RUN en una sola línea para reducir la cantidad de capas en la imagen final.
- Orden de las instrucciones: Colocar las instrucciones más cambiantes al final para optimizar la caché de Docker.
- Eliminar archivos temporales: Limpiar los archivos temporales al final de las instrucciones RUN para mantener la imagen ligera.
Ejemplo avanzado de Dockerfile
Veamos un ejemplo más complejo que incluye estas mejores prácticas:
FROM python:3.9-slim
# Estableciendo el directorio de trabajo
WORKDIR /app
# Copiando los requirements
COPY requirements.txt .
# Instalando dependencias
RUN pip install --no-cache-dir -r requirements.txt
# Copiando el código de la aplicación
COPY . .
# Exponiendo el puerto
EXPOSE 5000
# Comando para ejecutar la aplicación
CMD ["python", "app.py"]
En este ejemplo, utilizamos una imagen base de Python en su versión mínima. Instalamos las dependencias, copiamos el código fuente y exponemos el puerto necesario, todo mientras mantenemos una imagen liviana y eficiente.
Publicación de la imagen en Docker Hub
Si deseas compartir tu imagen, puedes subirla a Docker Hub usando los siguientes comandos después de iniciar sesión:
docker tag mi-aplicacion miusuario/mi-aplicacion:latest
docker push miusuario/mi-aplicacion:latest
Esto facilitará su reutilización en diferentes entornos y por otros colaboradores de proyectos.

Deja una respuesta