Crear una imagen de Docker con Node.js y TypeScript


🚀 Crear una imagen de Docker

Docker te permite empaquetar y distribuir aplicaciones de una manera consistente y escalable. En esta guía, recorreremos los pasos para crear una imagen de Docker para una aplicación simple de Node.js y TypeScript.



Tabla de contenidos



🛠 Requisitos previos

Antes de comenzar, asegúrate de tener lo siguiente instalado en tu máquina:



Configurar un proyecto en Nodejs

Comencemos creando una aplicación Node.js + TypeScript sencilla:

$ mkdir node-docker-app && cd node-docker-app
$ npm init -y
$ npm install typescript ts-node express cors
$ npx tsc --init

Luego, crea un archivo index.ts en la raiz de tu proyecto.

import express from 'express';
import cors from 'cors';

class Server {

    public app: express.Application = express();
    private port: number = 4000;

    constructor() {
        this.app.use(express.json());
        this.app.use(express.urlencoded({ extended: true }));
        this.app.use(cors());

        this.listen();
    }

     public listen() {
        this.app.listen(() => console.log(`Server listening on port ${this.port}`));
     }
}

new Server();

Crear-un Dockerfile

Ahora, vamos a crear un Dockerfile en la raíz de nuestro proyecto.

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

# Establecer el directorio de trabajo dentro del contenedor
WORKDIR /app

# Copiar package.json y package-lock.json
COPY package*.json ./

# Instalar dependencias
RUN npm install

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

# Exponer el puerto de la aplicación
EXPOSE 4000

# Iniciar la aplicación
CMD ["npm", "run", "start"]

Ejecutar y probar la imagen de Docker

# Construir la imagen de Docker
$ docker build -t nodejs-ts-docker .

# Ejecutar el contenedor
$ docker run -p 4000:4000 nodejs-ts-docker

Usando Docker Compose

En lugar de ejecutar múltiples comandos manualmente, podemos usar docker-compose.yml:

version: "3.8"
services:
 app:
   build: .
   ports:
     - "4000:4000"
   environment:
     - NODE_ENV=development

✅ Ejecutando con Docker Compose

$ docker-compose up -d

Producción con docker-compose.prod.yml

version: "3.8"
services:
  app:
    build: .
    ports:
      - "4000:4000"
    environment:
      - NODE_ENV=production
    command: ["node", "build/index.js"]

✅ Ejecutando en Producción

$ docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d

Esto le indica a Docker que use tanto docker-compose.yml como docker-compose.prod.yml, sobrescribiendo la configuración específica de producción.

🔗 Repositorio del Proyecto

Para ver el código fuente completo y las últimas actualizaciones, visita:

👉 GitHub Repository 🚀