¿Qué es un Dockerfile?

Un Dockerfile es un archivo de texto que contiene todas las instrucciones necesarias para construir una imagen de Docker. Es como una receta que le dice a Docker cómo crear tu aplicación.

Estructura básica de un Dockerfile

dockerfile
# Comentario
INSTRUCCIÓN argumentos

Instrucciones principales

1. FROM - Imagen base

dockerfile
FROM ubuntu:20.04
FROM python:3.9
FROM node:16-alpine

2. RUN - Ejecutar comandos

dockerfile
RUN apt-get update && apt-get install -y python3
RUN pip install flask
RUN mkdir /app

3. COPY - Copiar archivos

dockerfile
COPY . /app
COPY requirements.txt /app/

4. WORKDIR - Directorio de trabajo

dockerfile
WORKDIR /app

5. EXPOSE - Exponer puertos

dockerfile
EXPOSE 80
EXPOSE 3000

6. CMD - Comando por defecto

dockerfile
CMD ["python", "app.py"]
CMD ["npm", "start"]

Ejemplo completo

dockerfile
# Usar una imagen base de Python
FROM python:3.9-slim

# Establecer el directorio de trabajo
WORKDIR /app

# Copiar archivos de requisitos primero (para cache)
COPY requirements.txt .

# Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt

# Copiar el resto de la aplicación
COPY . .

# Exponer el puerto
EXPOSE 5000

# Comando para ejecutar la aplicación
CMD ["python", "app.py"]

Proceso de construcción

  1. Crear el Dockerfile

  2. Construir la imagen:

    bash
    docker build -t mi-aplicacion .
  3. Ejecutar el contenedor:

    bash
    docker run -p 5000:5000 mi-aplicacion

Buenas prácticas

1. Usar .dockerignore

text
node_modules
.git
.env
*.log

2. Optimizar capas

dockerfile
# MAL - Múltiples RUN crean muchas capas
RUN apt-get update
RUN apt-get install -y python3
RUN pip install flask

# BIEN - Un solo RUN
RUN apt-get update && \
    apt-get install -y python3 && \
    pip install flask

3. Multi-stage builds (para aplicaciones complejas)

dockerfile
# Stage 1: Build
FROM node:16 as builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Stage 2: Production
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
EXPOSE 80

Ejemplo real: Aplicación web simple

dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

Comandos útiles

bash
# Construir imagen
docker build -t mi-imagen .

# Ver imágenes
docker images

# Ejecutar contenedor
docker run -d -p 80:80 mi-imagen

# Ver contenedores en ejecución
docker ps

Ventajas de usar Dockerfile

  • Reproducibilidad: Siempre obtienes el mismo entorno

  • Versionado: Puedes controlar cambios en el Dockerfile

  • Portabilidad: Funciona en cualquier sistema con Docker

  • Automatización: Fácil de integrar en CI/CD


Comentarios

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Instalar Docker en Ubuntu Server usando docker.io

Tutorial de Carpetas y Directorios en Ubuntu Linux