Mario Rodríguez - Photo

Mario Rodríguez

Temas y Tips sobre Programación y Tecnología


CÓMO CREAR, SUBIR Y COMPARTIR IMÁGENES DOCKER EN DOCKER HUB

10 minutos

Introducción

Docker Hub es una plataforma esencial para almacenar y compartir imágenes Docker.
En artículos anteriores, exploramos

Docker Hub: Repositorios Públicos y Privados

y los Comandos básicos de Docker, que te pueden ayudar a comprender mejor los fundamentos de esta herramienta.

Ya sea que trabajes en proyectos personales o colaborativos, entender cómo gestionar imágenes en Docker Hub es fundamental para un flujo de trabajo eficiente.
En este artículo, exploraremos paso a paso cómo crear, subir y compartir imágenes Docker en esta plataforma, utilizando un proyecto sencillo en TypeScript como ejemplo.


1. Creando una aplicación con Node.js y TypeScript

Antes de subir una imagen a Docker Hub, necesitamos una aplicación que podamos empaquetar en un contenedor.
Crearemos una API básica con Node.js y TypeScript que exponga un endpoint /hello .

1. Inicializa el proyecto

mkdir hello-docker-ts
cd hello-docker-ts
npm init -y
      

2. Instala las dependencias necesarias

npm install express
npm install typescript @types/node @types/express ts-node-dev --save-dev
      

3. Configura TypeScript

Ejecuta el siguiente comando para generar un archivo tsconfig.json :

npx tsc --init
      

Edita el tsconfig.json con la siguiente configuración recomendada:

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "rootDir": "./src",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true,
    "forceConsistentCasingInFileNames": true
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "dist"]
}
      

4. Crea la estructura del proyecto

Organiza tus archivos de la siguiente manera:

hello-docker-ts/
├── src/
│   └── server.ts    # Código fuente principal
├── dist/            # Generado automáticamente al compilar
├── package.json
├── tsconfig.json
└── node_modules/
      

5. Implementa el servidor

Crea un archivo src/server.ts con el siguiente contenido:

import express, { Request, Response } from 'express';

const app = express();

app.get('/hello', (req: Request, res: Response) => {
  res.json({ message: 'Hello, Docker!' });
});

const PORT = 3000;
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`);
});
      

6. Configura el script de inicio

En el archivo package.json , asegúrate de que el script de inicio sea:

"scripts": {
  "build": "npx tsc",
  "start": "npm run build && node dist/server.js"
}
      

7. Prueba el servidor

Ejecuta el comando:

npm start
      

8. Código fuente disponible

Puedes encontrar el código completo de este proyecto en GitHub:
hello-docker-ts.

Si todo está correcto, al visitar el endpoint http://localhost:3000/hello verás algo como esto:

{
  "message": "Hello, Docker!"
}
      

2. Crear una imagen Docker para la aplicación

1. Crea un archivo Dockerfile

En el directorio del proyecto, crea un archivo llamado Dockerfile con el siguiente contenido:

# Imagen base para Node.js
FROM node:18-slim

# Establecemos el directorio de trabajo
WORKDIR /app

# Copiamos los archivos necesarios
COPY package*.json ./
RUN npm install

# Copiamos el resto del código
COPY . ./

# Compilamos el código TypeScript
RUN npm run build

# Exponemos el puerto
EXPOSE 3000

# Comando para ejecutar la aplicación
CMD ["node", "dist/server.js"]
      

2. Construye la imagen

Ejecuta el comando:

docker build -f Dockerfile -t hello-docker-ts .
      

3. Prueba la imagen localmente

docker run -p 3000:3000 hello-docker-ts
      

Ve a http://localhost:3000/hello y verifica que el contenedor funciona correctamente.


3. Subiendo imágenes a Docker Hub

1. Inicia sesión en Docker Hub

docker login
      

2. Etiqueta la imagen

docker tag hello-docker-ts usuario/hello-docker-ts:1.0
      

3. Sube la imagen a Docker Hub

docker push usuario/hello-docker-ts:1.0
      

4. Verifica la imagen en Docker Hub

Ve a tu cuenta en Docker Hub y verifica que la imagen esté disponible.


4. Compartiendo tu imagen Docker

1. Repositorios públicos

Si tu repositorio es público, otros usuarios pueden descargar tu imagen con:

docker pull mrodrigueztech/hello-docker-ts:1.0
      

2. Repositorios privados

Para compartir imágenes privadas, puedes otorgar acceso a usuarios desde Docker Hub.


Conclusión

Docker Hub simplifica el proceso de compartir y distribuir imágenes Docker.
Ahora que sabes cómo crear, subir y compartir una aplicación TypeScript empaquetada en Docker, puedes integrar esta herramienta en tu flujo de trabajo.

En el próximo artículo, exploraremos cómo gestionar múltiples contenedores con Docker Compose. ¡No te lo pierdas!