Desplegando la aplicación en docker y creando manifiestos para kubernetes
Tags: azure, devops, kubernetes, spanish
Published: 2024-06-09 15:37:32

---
title: Desplegando la aplicación en docker y creando manifiestos para kubernetes
published: true
date: 2024-06-08 14:08:00 UTC
tags: Azure,DevOps,kubernetes,spanish
canonical_url: https://www.ahioros.info/2024/06/desplegando-la-aplicacion-en-docker-y.html
---

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?](https://es.wikipedia.org/wiki/Docker_(software))
    [¿Qué es kubernetes?](https://kubernetes.io/es/docs/concepts/overview/what-is-kubernetes/)

<!-- agrega el botón leer más -->

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

  Verificamos nuestro contenedor en la consola:

  ```bash
      docker ps | grep my-rdicidr
  ```

  Para detener el contenedor ejecutamos el siguiente comando:

  ```bash
      docker stop my-rdicidr
  ```

  Para borrar el contenedor ejecutamos el siguiente comando:

  ```bash
      docker rm my-rdicidr
  ```

  Para borrar la imagen ejecutamos el siguiente comando:

  ```bash
      docker image rm ahioros/rdicidr:latest
      # también funciona el shortcut para borrar la imagen
      docker rmi ahioros/rdicidr
  ```

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

2. 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**
  ```yaml  
  apiVersion: v1
  kind: Namespace
  metadata:
    name: production
  ```

  **02-deployment.yaml**
  ```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
  ```

  **03-service.yaml**
  ```yaml
  apiVersion: v1
  kind: Service
  metadata:
    name: service-rdicidr
    namespace: production
  spec:
    selector:
      app: rdicidr
    ports:
      - protocol: TCP
        port: 80
        targetPort: 3000
  ```

  **04-ingress.yaml**
  ```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
  ```

  Aplicamos los manifests:
  ```bash
      kubectl apply -f .
  ```
  **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:
  ```bash
      kubectl port-forward --namespace=production service/service-rdicidr 8080:80
  ```

  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:

  ```bash
      kubectl delete -f .
  ```
Acá te dejo el video de esta configuración por si tienes dudas:

{% youtube T-KArwWX1Vw %}

<iframe allowfullscreen="" youtube-src-id="T-KArwWX1Vw" width="480" height="270" src="https://www.youtube.com/embed/T-KArwWX1Vw"></iframe>
En nuestro siguiente post te enseñaré a instalar ArgoCD en Kubernetes para que automaticemos el despliegue.