DEV Community

Guillermo Garcia
Guillermo Garcia

Posted on • Originally published at ahioros.info on

Desplegando la aplicación en docker y creando manifiestos para kubernetes

Hemos estado realizando nuestro primer pipeline para nuestra aplicación en react, lo que vamos a realizar en este video es probar nuestra imagen en docker y crear nuestros manifestos para kubernetes.

Nota: Estamos partiendo que tienes conocimientos básicos de docker y kubernetes, ta les como:
¿Qué es docker?
¿Qué es kubernetes?

  1. Docker Para correr nuestra imagen ejecutamos el siguiente comando:
      docker run -d --name my-rdicidr -p 3000:3000 ahioros/rdicidr:latest
Enter fullscreen mode Exit fullscreen mode

Verificamos nuestro contenedor en la consola:

      docker ps | grep my-rdicidr
Enter fullscreen mode Exit fullscreen mode

Para detener el contenedor ejecutamos el siguiente comando:

      docker stop my-rdicidr
Enter fullscreen mode Exit fullscreen mode

Para borrar el contenedor ejecutamos el siguiente comando:

      docker rm my-rdicidr
Enter fullscreen mode Exit fullscreen mode

Para borrar la imagen ejecutamos el siguiente comando:

      docker image rm ahioros/rdicidr:latest
      # también funciona el shortcut para borrar la imagen
      docker rmi ahioros/rdicidr
Enter fullscreen mode Exit fullscreen mode

Ahora vamos a ver en nuestro navegador que nuestra aplicación se esta desplegando en el puerto 3000.

  1. Kubernetes

Vamos a crear los siguientes archivos:
01-namespace.yaml : crearemos un namespace para nuestra aplicación.
02-deployment.yaml : creamos el deployment para nuestra aplicación, y definimos la cantidad de replicas y puerto de escucha de nuestra aplicación.
03-service.yaml : añadiremos un servicio para nuestra aplicación y un puerto de escucha para nuestro servicio.
04-ingress.yaml : y por último un ingress para acceder nuestra aplicación.

01-namespace.yaml

  apiVersion: v1
  kind: Namespace
  metadata:
    name: production
Enter fullscreen mode Exit fullscreen mode

02-deployment.yaml

  apiVersion: apps/v1
  kind: Deployment
  metadata:
    name: deployment-rdicidr
    namespace: production
    labels:
      app: rdicidr
  spec:
    replicas: 3
    selector:
      matchLabels:
        app: rdicidr
    template:
      metadata:
        labels:
          app: rdicidr
      spec:
        containers:
        - name: rdicidr
          image: ahioros/rdicidr:latest
          ports:
          - containerPort: 3000
Enter fullscreen mode Exit fullscreen mode

03-service.yaml

  apiVersion: v1
  kind: Service
  metadata:
    name: service-rdicidr
    namespace: production
  spec:
    selector:
      app: rdicidr
    ports:
      - protocol: TCP
        port: 80
        targetPort: 3000
Enter fullscreen mode Exit fullscreen mode

04-ingress.yaml

  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: rdicidr-nginx-ingress
    namespace: production
    annotations:
      nginx.ingress.kubernetes.io/rewrite-target: /
  spec:
    ingressClassName: nginx
    rules:
    - http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: service-rdicidr
              port:
                number: 80
Enter fullscreen mode Exit fullscreen mode

Aplicamos los manifests:

      kubectl apply -f .
Enter fullscreen mode Exit fullscreen mode

Nota : Como los archivos tienen un número al inicio del nombre este especifica un orden, esto hace que se aplique en ese orden.

Realizamos un port-forward:

      kubectl port-forward --namespace=production service/service-rdicidr 8080:80
Enter fullscreen mode Exit fullscreen mode

Ahora vamos a ver en nuestro navegador que nuestra aplicación se esta desplegando en el puerto http://localhost:8080.

Después de realizar las pruebas y comprobar que la aplicación está funcionando podemos eliminarla de nuestro kubernetes:

      kubectl delete -f .
Enter fullscreen mode Exit fullscreen mode

Acá te dejo el video de esta configuración por si tienes dudas:

En nuestro siguiente post te enseñaré a instalar ArgoCD en Kubernetes para que automaticemos el despliegue.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up