Tutorial Completo de Dockerfile
Tutorial Completo de Dockerfile: De Cero a Experto
馃摎 Introducci贸n a Dockerfile
Un Dockerfile es un script de texto que contiene todas las instrucciones necesarias para construir una imagen de Docker. Es como una receta que le dice a Docker exactamente c贸mo crear tu aplicaci贸n y su entorno.
馃幆 Las Instrucciones M谩s Comunes
1. FROM - Imagen Base
# Sintaxis
FROM <imagen>:<tag>
# Ejemplos
FROM ubuntu:20.04
FROM python:3.9-slim
FROM node:16-alpine
FROM nginx:alpine¿Para qu茅 sirve?
Define la imagen base sobre la que construir谩s
Siempre debe ser la primera instrucci贸n en un Dockerfile
Usa im谩genes oficiales cuando sea posible
2. RUN - Ejecutar Comandos
# Sintaxis
RUN <comando>
# Ejemplos
RUN apt-get update && apt-get install -y python3
RUN pip install -r requirements.txt
RUN mkdir /app && chmod 755 /app¿Para qu茅 sirve?
Ejecuta comandos durante la construcci贸n de la imagen
Cada RUN crea una nueva capa en la imagen
Combina comandos relacionados con
&¶ reducir capas
馃挕 Mejor Pr谩ctica:
# MAL - M煤ltiples capas
RUN apt-get update
RUN apt-get install -y python3
RUN pip install flask
# BIEN - Una sola capa
RUN apt-get update && \
apt-get install -y python3 && \
pip install flask3. COPY - Copiar Archivos
# Sintaxis
COPY <origen> <destino>
# Ejemplos
COPY . /app
COPY requirements.txt /tmp/
COPY script.sh /usr/local/bin/¿Para qu茅 sirve?
Copia archivos y directorios desde tu m谩quina local a la imagen
Los paths son relativos al contexto de construcci贸n
4. WORKDIR - Directorio de Trabajo
# Sintaxis
WORKDIR <ruta>
# Ejemplos
WORKDIR /app
WORKDIR /usr/src/app¿Para qu茅 sirve?
Establece el directorio de trabajo para las instrucciones siguientes
Equivale a
cd <directorio>en LinuxSi el directorio no existe, lo crea autom谩ticamente
5. CMD - Comando por Defecto
# Sintaxis (3 formas)
CMD ["executable","param1","param2"] # Forma exec (recomendada)
CMD command param1 param2 # Forma shell
CMD ["param1","param2"] # Como par谩metros para ENTRYPOINT
# Ejemplos
CMD ["nginx", "-g", "daemon off;"]
CMD ["python", "app.py"]
CMD npm start¿Para qu茅 sirve?
Define el comando que se ejecutar谩 al iniciar el contenedor
Puede ser sobrescrito al ejecutar
docker runSolo puede haber un CMD por Dockerfile
6. ENTRYPOINT - Punto de Entrada
# Sintaxis
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
# Ejemplos
ENTRYPOINT ["/docker-entrypoint.sh"]
ENTRYPOINT ["python"]¿Para qu茅 sirve?
Define el comando principal del contenedor
No puede ser sobrescrito f谩cilmente (solo con
--entrypoint)Se combina con CMD para pasar par谩metros
馃殌 Tutorial Pr谩ctico: Crear un Servidor Web con Nginx
Paso 1: Crear la Estructura de Archivos
# Crear directorio del proyecto
mkdir mi-contenedor-web
cd mi-contenedor-web
# Crear Dockerfile
touch Dockerfile
# Crear archivo HTML de ejemplo
echo "<html><body><h1>¡Hola Docker!</h1></body></html>" > index.htmlPaso 2: Crear el 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 3: Construir la Imagen
# Construir la imagen
docker build -t mi-contenedor-web .
# Ver im谩genes disponibles
docker images馃摑 Explicaci贸n del comando build:
-t mi-contenedor-web: Le da un nombre (tag) a la imagen.: Indica que el contexto de construcci贸n es el directorio actual
Paso 4: Ejecutar el Contenedor
# Ejecutar el contenedor
docker run -d -p 8080:80 --name mi-servidor-web mi-contenedor-web馃摑 Explicaci贸n del comando run:
-d: Ejecuta en segundo plano (detached mode)-p 8080:80: Mapea puerto 8080 del host al puerto 80 del contenedor--name mi-servidor-web: Asigna un nombre al contenedor
Paso 5: Verificar que Funciona
Abre tu navegador y visita: http://localhost:8080
馃洜️ Comandos Esenciales de Docker
1. Gestionar Contenedores
# Ver contenedores en ejecuci贸n
docker ps
# Ver todos los contenedores (incluyendo detenidos)
docker ps -a
# Detener un contenedor
docker stop mi-servidor-web
# Iniciar un contenedor detenido
docker start mi-servidor-web
# Eliminar un contenedor
docker rm mi-servidor-web
# Ver logs de un contenedor
docker logs mi-servidor-web2. Gestionar Im谩genes
# Listar im谩genes
docker images
# Eliminar una imagen
docker rmi mi-contenedor-web
# Limpiar recursos no utilizados
docker system prune3. Acceder a un Contenedor en Ejecuci贸n
# Acceder con bash
docker exec -it mi-servidor-web bash
# Si no tiene bash, usar sh
docker exec -it mi-servidor-web sh
# Ejecutar un comando espec铆fico
docker exec mi-servidor-web ls -la /usr/share/nginx/html¿Por qu茅 acceder a un contenedor?
馃攳 Depurar problemas: Ver logs, configuraciones o estados
馃洜️ Tareas administrativas: Instalar paquetes, modificar archivos
馃搳 Inspeccionar el entorno: Ver c贸mo est谩 configurado
馃悰 Solucionar errores: Diagnosticar por qu茅 no funciona algo
馃幆 Ejemplo Avanzado: Dockerfile para Desarrollo vs Producci贸n
Dockerfile para Desarrollo (Dockerfile.dev)
FROM node:16
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# Instalar herramientas de desarrollo
RUN npm install -g nodemon
EXPOSE 3000
CMD ["nodemon", "app.js"]Dockerfile para Producci贸n (Dockerfile.prod)
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --only=production
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]Construir con Dockerfiles Espec铆ficos
# Para desarrollo
docker build -t mi-app:dev -f Dockerfile.dev .
# Para producci贸n
docker build -t mi-app:prod -f Dockerfile.prod .馃搵 Resumen de Buenas Pr谩cticas
Usa im谩genes base oficiales y espec铆ficas
# BIEN FROM python:3.9-slim # MAL FROM python:latestMinimiza el n煤mero de capas
# BIEN RUN apt-get update && \ apt-get install -y python3 && \ pip install flask # MAL RUN apt-get update RUN apt-get install -y python3 RUN pip install flaskUsa .dockerignore
# Crear archivo .dockerignore echo "node_modules\n.git\n.env\n*.log" > .dockerignoreOrdena las instrucciones inteligentemente
Coloca las instrucciones que cambian menos frecuentemente al inicio
Coloca las que cambian m谩s al final
馃帀 ¡Felicidades!
Ahora sabes:
✅ Qu茅 es un Dockerfile y c贸mo funciona
✅ Las instrucciones principales (FROM, RUN, COPY, WORKDIR, CMD, ENTRYPOINT)
✅ C贸mo construir y ejecutar contenedores
✅ C贸mo gestionar contenedores e im谩genes
✅ C贸mo acceder y depurar contenedores
✅ Buenas pr谩cticas para Dockerfiles
Comentarios
Publicar un comentario