Escribir un Dockerfile
Explicación
Un Dockerfile es un documento basado en texto que se utiliza para crear una imagen de contenedor. Proporciona instrucciones al constructor de imágenes sobre los comandos a ejecutar, los archivos a copiar, el comando de inicio y más.
Como ejemplo, el siguiente Dockerfile produciría una aplicación de Python lista para ejecutarse:
FROM python:3.13
WORKDIR /usr/local/app
# Instalar las dependencias de la aplicación
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# Copiar el código fuente
COPY src ./src
EXPOSE 8080
# Configurar un usuario de aplicación para que el contenedor no se ejecute como el usuario root
RUN useradd app
USER app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"]Instrucciones comunes
Algunas de las instrucciones más comunes en un Dockerfile incluyen:
FROM <image>: especifica la imagen base que extenderá la compilación.WORKDIR <path>: esta instrucción especifica el "directorio de trabajo" o la ruta en la imagen donde se copiarán los archivos y se ejecutarán los comandos.COPY <host-path> <image-path>: esta instrucción indica al constructor que copie archivos desde el host y los coloque en la imagen del contenedor.RUN <command>: esta instrucción indica al constructor que ejecute el comando especificado.ENV <name> <value>: esta instrucción establece una variable de entorno que utilizará un contenedor en ejecución.EXPOSE <port-number>: esta instrucción establece la configuración en la imagen para indicar un puerto que la imagen desea exponer.USER <user-or-uid>: esta instrucción establece el usuario predeterminado para todas las instrucciones siguientes.CMD ["<command>", "<arg1>"]: esta instrucción establece el comando predeterminado que ejecutará un contenedor que use esta imagen.
Para leer todas las instrucciones o entrar en mayor detalle, consulta la referencia de Dockerfile.
Pruébalo
Tal como viste con el ejemplo anterior, un Dockerfile normalmente sigue estos pasos:
- Determinar tu imagen base
- Instalar las dependencias de la aplicación
- Copiar cualquier código fuente y/o binarios relevantes
- Configurar la imagen final
En esta rápida guía práctica, escribirás un Dockerfile que compila una aplicación simple de Node.js. Si no estás familiarizado con las aplicaciones basadas en JavaScript, no te preocupes. No es necesario para seguir esta guía.
Configuración
Descarga este archivo ZIP y extrae su contenido en un directorio de tu máquina.
Si prefieres no descargar un archivo ZIP, clona el proyecto https://github.com/docker/getting-started-todo-app y realiza un checkout de la rama build-image-from-scratch.
Crear el Dockerfile
Ahora que tienes el proyecto, estás listo para crear el Dockerfile.
Descarga e instala Docker Desktop.
Examina el proyecto.
Explora el contenido de
getting-started-todo-app/app/. Notarás que ya existe unDockerfile. Es un archivo de texto simple que puedes abrir en cualquier editor de texto o de código.Elimina el
Dockerfileexistente.Para este ejercicio, simularás que estás empezando desde cero y crearás un nuevo
Dockerfile.Crea un archivo llamado
Dockerfileen la carpetagetting-started-todo-app/app/.Extensiones de archivo del Dockerfile
Es importante tener en cuenta que el
Dockerfileno tiene extensión de archivo. Algunos editores añadirán automáticamente una extensión al archivo (or complain it doesn't have one).In el
Dockerfile, define tu imagen base añadiendo la siguiente línea:FROM node:22-alpineAhora, define el directorio de trabajo utilizando la instrucción
WORKDIR. Esto especificará dónde se ejecutarán los comandos futuros y la ruta donde se copiarán los archivos dentro de la imagen del contenedor.WORKDIR /appCopia todos los archivos de tu proyecto en tu máquina a la imagen del contenedor utilizando la instrucción
COPY:COPY . .Instala las dependencias de la aplicación utilizando la CLI de
yarny su gestor de paquetes. Para hacerlo, ejecuta un comando utilizando la instrucciónRUN:RUN yarn install --productionFinalmente, especifica el comando predeterminado a ejecutar utilizando la instrucción
CMD:CMD ["node", "./src/index.js"]Y con eso, deberías tener el siguiente Dockerfile:
FROM node:22-alpine WORKDIR /app COPY . . RUN yarn install --production CMD ["node", "./src/index.js"]
Este Dockerfile aún no está listo para producción
Es importante tener en cuenta que este Dockerfile no sigue todas las mejores prácticas todavía (por diseño). Compilará la aplicación, pero las compilaciones no serán tan rápidas ni las imágenes tan seguras como podrían serlo.
Sigue leyendo para aprender más sobre cómo hacer que la imagen maximice la caché de compilación, se ejecute como un usuario no root y sobre las compilaciones multietapa.
Contenedoriza nuevos proyectos rápidamente con
docker initEl comando
docker initanalizará tu proyecto y creará rápidamente un Dockerfile, un archivocompose.yamly un.dockerignore, ayudándote a ponerte en marcha. Dado que aquí estás aprendiendo específicamente sobre Dockerfiles, no lo usarás ahora. Sin embargo, obtén más información al respecto aquí.
Recursos adicionales
Para obtener más información sobre cómo escribir un Dockerfile, visita los siguientes recursos:
Siguientes pasos
Ahora que has creado un Dockerfile y aprendido los conceptos básicos, es hora de aprender a compilar, etiquetar y subir las imágenes.
Compilar, etiquetar y publicar la imagen