Tutorial Completo de Dockerfile

Tabla de Contenidos

  1. ¿Qué es un Dockerfile?

  2. Instrucciones más comunes

  3. Tutorial paso a paso

  4. Gestión de contenedores

  5. Ejemplo avanzado

¿Qué es un Dockerfile?

Un Dockerfile es un documento de texto que contiene todas las instrucciones necesarias para construir una imagen de Docker. Funciona como una receta que le dice a Docker cómo crear tu aplicación y empaquetarla en un contenedor.

Instrucciones más comunes

FROM

Indica la imagen base que se utilizará para construir la nueva imagen.

dockerfile
FROM nginx:alpine
FROM python:3.12

RUN

Ejecuta comandos durante la construcción de la imagen.

dockerfile
RUN apt-get update
RUN pip install -r requirements.txt

COPY

Copia archivos o directorios desde tu computadora a la imagen.

dockerfile
COPY index.html /usr/share/nginx/html/
COPY . /app

WORKDIR

Establece el directorio de trabajo para las instrucciones siguientes.

dockerfile
WORKDIR /app

CMD

Define el comando por defecto que se ejecutará al iniciar el contenedor.

dockerfile
CMD ["nginx", "-g", "daemon off;"]

ENTRYPOINT

Similar a CMD, pero no se puede sobrescribir fácilmente.

dockerfile
ENTRYPOINT ["python", "app.py"]

Tutorial paso a paso

Paso 1: Crear el Dockerfile

Crea un archivo llamado Dockerfile (sin extensión):

bash
touch Dockerfile

Edita el archivo con el siguiente contenido:

dockerfile
# Usar la imagen oficial de Nginx como base
FROM nginx:alpine

# Copiar el archivo HTML al directorio de Nginx
COPY index.html /usr/share/nginx/html/index.html

# Exponer el puerto 80
EXPOSE 80

# Comando para iniciar Nginx
CMD ["nginx", "-g", "daemon off;"]

Paso 2: Crear el archivo HTML

Crea un archivo index.html en la misma carpeta:

html
<!DOCTYPE html>
<html>
<head>
    <title>Mi Contenedor Web</title>
</head>
<body>
    <h1>¡Hola desde Docker!</h1>
    <p>Este es mi primer contenedor web.</p>
</body>
</html>

Paso 3: Construir la imagen

Ejecuta el siguiente comando para construir la imagen:

bash
docker build -t mi-contenedor-web .

Explicación del comando:

  • docker build: Comando para construir imágenes

  • -t mi-contenedor-web: Le da un nombre (tag) a la imagen

  • .: Indica que el Dockerfile está en el directorio actual

Paso 4: Ejecutar el contenedor

Una vez construida la imagen, ejecuta el contenedor:

bash
docker run -d -p 8080:80 --name mi-servidor-web mi-contenedor-web

Explicación de las opciones:

  • -d: Ejecuta en segundo plano (detached mode)

  • -p 8080:80: Mapea el puerto 8080 de tu máquina al puerto 80 del contenedor

  • --name mi-servidor-web: Asigna un nombre al contenedor

Paso 5: Verificar el resultado

Abre tu navegador y visita:

text
http://localhost:8080

¡Deberías ver tu página web funcionando!

Gestión de contenedores

Listar contenedores en ejecución

bash
docker ps

Listar todos los contenedores (incluyendo detenidos)

bash
docker ps -a

Detener un contenedor

bash
docker stop mi-servidor-web

Iniciar un contenedor detenido

bash
docker start mi-servidor-web

Eliminar un contenedor

bash
docker rm mi-servidor-web

Acceder a un contenedor en ejecución

bash
# Si la imagen tiene bash
docker exec -it mi-servidor-web bash

# Si no tiene bash, usar sh
docker exec -it mi-servidor-web sh

¿Para qué sirve acceder a un contenedor?

  • Depurar problemas

  • Verificar logs y configuraciones

  • Realizar tareas administrativas

  • Explorar el entorno del contenedor

Uso de diferentes archivos Dockerfile

Dockerfile para desarrollo

bash
docker build -t mi-app-dev -f Dockerfile.dev .

Dockerfile para producción

bash
docker build -t mi-app-prod -f Dockerfile.prod .

Ejemplo avanzado: Aplicación Python

Aquí tienes un ejemplo más completo para una aplicación Python:

dockerfile
# Imagen base de Python
FROM python:3.12

# Establecer directorio de trabajo
WORKDIR /usr/local/app

# Copiar e instalar dependencias
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

# Copiar código fuente
COPY src ./src

# Exponer puerto
EXPOSE 5000

# Crear usuario no-root por seguridad
RUN useradd app
USER app

# Comando para ejecutar la aplicación
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]

Flujo de trabajo típico

  1. Desarrollo: Crear y probar el Dockerfile

  2. Construccióndocker build -t mi-app .

  3. Pruebadocker run -p 8080:80 mi-app

  4. Publicación: Subir a Docker Hub o registro privado

  5. Despliegue: Descargar y ejecutar en producción

Recursos adicionales

¡Ahora estás listo para crear tus propias imágenes de Docker! 

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