Cómo configurar Docker para una aplicación web

Configurar Docker para una aplicación web implica contenerizar su aplicación y sus dependencias, asegurando entornos consistentes en desarrollo, pruebas y producción. Aquí tienes una guía general que cubre los componentes esenciales:

Beginner

Configurar Docker para una aplicación web implica contenerizar su aplicación y sus dependencias, asegurando entornos consistentes en desarrollo, pruebas y producción. Aquí tienes una guía general que cubre los componentes esenciales:

1. Instalar Docker

Primero, asegúrese de que Docker esté instalado en su sistema. Puede descargar Docker Desktop para su sistema operativo desde el sitio web oficial de Docker. Para herramientas de línea de comandos en Linux, use el administrador de paquetes de su distribución (por ejemplo, sudo apt install docker.io en Ubuntu).

2. Crear un Dockerfile

Un Dockerfile es un archivo de texto que contiene instrucciones para que Docker construya una imagen. Define el entorno, las dependencias y cómo ejecutar su aplicación.

Ejemplo de Dockerfile para una aplicación Node.js:

# Usar una imagen base oficial de Node.js runtime
FROM node:18-alpine

# Establecer el directorio de trabajo en el contenedor
WORKDIR /app

# Copiar package.json y package-lock.json (o yarn.lock)
COPY package*.json ./

# Instalar dependencias de la aplicación
RUN npm install

# Copiar el resto del código de su aplicación
COPY . .

# Exponer el puerto en el que escucha su aplicación
EXPOSE 3000

# Definir el comando para ejecutar su aplicación
CMD [ "npm", "start" ]

Explicación de las instrucciones comunes de Dockerfile: * FROM <image>: Especifica la imagen base sobre la cual construir. * WORKDIR /app: Establece el directorio de trabajo actual dentro del contenedor. * COPY <src> <dest>: Copia archivos y directorios de su máquina host al contenedor. * RUN <command>: Ejecuta comandos durante el proceso de construcción de la imagen (por ejemplo, instalar dependencias). * EXPOSE <port>: Informa a Docker que el contenedor escucha en este puerto en tiempo de ejecución. * CMD ["executable", "param1", "param2"]: Especifica el comando predeterminado a ejecutar cuando el contenedor se inicia.

3. Construir su Imagen Docker

Navegue al directorio raíz de su proyecto (donde se encuentra su Dockerfile) en su terminal y ejecute el comando de construcción:

docker build -t your-app-name .
  • docker build: El comando para crear una imagen Docker.
  • -t your-app-name: Etiqueta la imagen con un nombre (por ejemplo, my-nodejs-app).
  • .: Especifica el contexto de construcción (el directorio actual), indicando a Docker dónde encontrar el Dockerfile y los archivos de la aplicación.

4. Ejecutar su Contenedor Docker

Una vez que la imagen esté construida, puede crear y ejecutar un contenedor a partir de ella.

docker run -p 80:3000 your-app-name
  • docker run: El comando para iniciar un contenedor.
  • -p 80:3000: Mapea el puerto 3000 dentro del contenedor (el que su aplicación escucha) al puerto 80 en su máquina host. Esto le permite acceder a su aplicación a través de http://localhost.
  • your-app-name: El nombre de la imagen Docker que desea ejecutar.

Su aplicación web ahora se ejecutará dentro de un contenedor Docker, accesible a través de su navegador.

5. Usar Docker Compose para Aplicaciones Multi-Servicio

Para aplicaciones que involucran múltiples servicios (por ejemplo, una aplicación web y una base de datos), Docker Compose es invaluable. Utiliza un archivo docker-compose.yml para definir y administrar todos los servicios.

Ejemplo de docker-compose.yml para una aplicación Node.js conectada a una base de datos PostgreSQL:

version: '3.8' # Especifica la versión del formato del archivo Compose

services:
  web:
    build: . # Construir la imagen desde el Dockerfile en el directorio actual
    ports:
      - "3000:3000"
    volumes:
      - .:/app # Montar el código local para actualizaciones en vivo (desarrollo)
    environment:
      DATABASE_URL: postgresql://user:password@db:5432/mydatabase
    depends_on:
      - db # Asegurar que la base de datos se inicie antes del servicio web
    networks:
      - app-network

  db:
    image: postgres:14-alpine # Usar una imagen preconstruida de PostgreSQL
    environment:
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data # Persistir datos de la base de datos
    networks:
      - app-network

volumes:
  db_data: # Definir el volumen con nombre

networks:
  app-network: # Definir una red personalizada

Para usar Docker Compose, coloque el archivo docker-compose.yml en el directorio raíz de su proyecto y ejecute:

docker compose up -d --build
  • docker compose up: Construye las imágenes (si se usa --build) e inicia los servicios.
  • -d: Ejecuta los contenedores en modo detached (en segundo plano).

Para detener y eliminar los contenedores, redes y volúmenes:

docker compose down

Esta configuración proporciona un entorno reproducible y aislado para su aplicación web, lo que hace que el desarrollo y la implementación sean mucho más fluidos.