# Despliegue y orquestación


La contenedorización ofrece la oportunidad de trasladar y escalar aplicaciones a nubes y centros de datos. Los contenedores garantizan que esas aplicaciones se ejecuten de la misma manera en cualquier lugar, lo que te permite aprovechar al máximo y con agilidad todos estos entornos. Además, a medida que escalas tus aplicaciones, necesitas herramientas que te ayuden a automatizar el mantenimiento de las mismas, permitir el reemplazo automático de contenedores fallidos y gestionar la implementación de actualizaciones y reconfiguraciones de esos contenedores durante su ciclo de vida.

Las herramientas para gestionar, escalar y mantener aplicaciones contenedorizadas se denominan orquestadores. Dos de las herramientas de orquestación más populares son Kubernetes y Docker Swarm. Docker Desktop proporciona entornos de desarrollo para ambos orquestadores.

Los módulos avanzados te enseñan a:

1. [Configurar y usar un entorno Kubernetes en tu máquina de desarrollo](/guides/orchestration/kube-deploy/)
2. [Configurar y usar un entorno Swarm en tu máquina de desarrollo](/guides/orchestration/swarm-deploy/)

## Activar Kubernetes

Docker Desktop configura Kubernetes por ti de forma ágil y directa. Sigue las instrucciones de configuración y validación adecuadas para tu sistema operativo:

**Mac y Linux**



### Mac

1. Desde el panel de Docker Dashboard, dirígete a **Settings** y selecciona la pestaña **Kubernetes**.

2. Selecciona la casilla etiquetada como **Enable Kubernetes** y selecciona **Apply**. Docker Desktop configura automáticamente Kubernetes por ti. Sabrás que Kubernetes se ha habilitado con éxito cuando veas una luz verde junto a 'Kubernetes _running_' en **Settings**.

3. Para confirmar que Kubernetes está en funcionamiento, crea un archivo de texto llamado `pod.yaml` con el siguiente contenido:

    ```yaml
    apiVersion: v1
    kind: Pod
    metadata:
      name: demo
    spec:
      containers:
        - name: testpod
          image: alpine:latest
          command: ["ping", "8.8.8.8"]
    ```

    Esto describe un pod con un solo contenedor, que aísla un ping básico a 8.8.8.8.

4. En una terminal, dirígete a donde creaste `pod.yaml` y crea tu pod:

    ```console
    $ kubectl apply -f pod.yaml
    ```

5. Verifica que tu pod esté en funcionamiento:

    ```console
    $ kubectl get pods
    ```

    Deberías ver algo como:

    ```shell
    NAME      READY     STATUS    RESTARTS   AGE
    demo      1/1       Running   0          4s
    ```

6. Verifica que obtienes los registros esperados para un proceso de ping:

    ```console
    $ kubectl logs demo
    ```

    Deberías ver la salida de un proceso de ping correcto:

    ```shell
    PING 8.8.8.8 (8.8.8.8): 56 data bytes
    64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms
    64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms
    64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms
    ...
    ```

7. Finalmente, elimina tu pod de prueba:

    ```console
    $ kubectl delete -f pod.yaml
    ```

**Windows**



### Windows

1. Desde el panel de Docker Dashboard, dirígete a **Settings** y selecciona la pestaña **Kubernetes**.

2. Selecciona la casilla etiquetada como **Enable Kubernetes** y selecciona **Apply**. Docker Desktop configura automáticamente Kubernetes por ti. Sabrás que Kubernetes se ha habilitado con éxito cuando veas una luz verde junto a 'Kubernetes _running_' en el menú **Settings**.

3. Para confirmar que Kubernetes está en funcionamiento, crea un archivo de texto llamado `pod.yaml` con el siguiente contenido:

   ```yaml
   apiVersion: v1
   kind: Pod
   metadata:
     name: demo
   spec:
     containers:
       - name: testpod
         image: alpine:latest
         command: ["ping", "8.8.8.8"]
   ```

   Esto describe un pod con un solo contenedor, que aísla un ping básico a 8.8.8.8.

4. En PowerShell, dirígete a donde creaste `pod.yaml` y crea tu pod:

   ```console
   $ kubectl apply -f pod.yaml
   ```

5. Verifica que tu pod esté en funcionamiento:

   ```console
   $ kubectl get pods
   ```

   Deberías ver algo como:

   ```shell
   NAME      READY     STATUS    RESTARTS   AGE
   demo      1/1       Running   0          4s
   ```

6. Verifica que obtienes los registros esperados para un proceso de ping:

   ```console
   $ kubectl logs demo
   ```

   Deberías ver la salida de un proceso de ping correcto:

   ```shell
   PING 8.8.8.8 (8.8.8.8): 56 data bytes
   64 bytes from 8.8.8.8: seq=0 ttl=37 time=21.393 ms
   64 bytes from 8.8.8.8: seq=1 ttl=37 time=15.320 ms
   64 bytes from 8.8.8.8: seq=2 ttl=37 time=11.111 ms
   ...
   ```

7. Finalmente, elimina tu pod de prueba:

   ```console
   $ kubectl delete -f pod.yaml
   ```



## Habilitar Docker Swarm

Docker Desktop se ejecuta principalmente sobre Docker Engine, que tiene todo lo necesario para ejecutar un Swarm integrado. Sigue las instrucciones de configuración y validación adecuadas para tu sistema operativo:

**Mac**



### Mac

1. Abre una terminal e inicializa el modo Docker Swarm:

   ```console
   $ docker swarm init
   ```

   Si todo va bien, deberías ver un mensaje similar al siguiente:

   ```shell
   Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager.

   To add a worker to this swarm, run the following command:

       docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377

   To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
   ```

2. Ejecuta un servicio Docker simple que use un sistema de archivos basado en alpine y aísle un ping a 8.8.8.8:

   ```console
   $ docker service create --name demo alpine:latest ping 8.8.8.8
   ```

3. Verifica que tu servicio haya creado un contenedor en ejecución:

   ```console
   $ docker service ps demo
   ```

   Deberías ver algo como:

   ```shell
   ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
   463j2s3y4b5o        demo.1              alpine:latest       docker-desktop      Running             Running 8 seconds ago
   ```

4. Verifica que obtienes los registros esperados para un proceso de ping:

   ```console
   $ docker service logs demo
   ```

   Deberías ver la salida de un proceso de ping correcto:

   ```shell
   demo.1.463j2s3y4b5o@docker-desktop    | PING 8.8.8.8 (8.8.8.8): 56 data bytes
   demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms
   demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms
   demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms
   ...
   ```

5. Finalmente, elimina tu servicio de prueba:

   ```console
   $ docker service rm demo
   ```

**Windows**



### Windows

1. Abre PowerShell e inicializa el modo Docker Swarm:

   ```console
   $ docker swarm init
   ```

   Si todo va bien, deberías ver un mensaje similar al siguiente:

   ```shell
   Swarm initialized: current node (tjjggogqpnpj2phbfbz8jd5oq) is now a manager.

   To add a worker to this swarm, run the following command:

       docker swarm join --token SWMTKN-1-3e0hh0jd5t4yjg209f4g5qpowbsczfahv2dea9a1ay2l8787cf-2h4ly330d0j917ocvzw30j5x9 192.168.65.3:2377

   To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
   ```

2. Ejecuta un servicio Docker simple que use un sistema de archivos basado en alpine y aísle un ping a 8.8.8.8:

   ```console
   $ docker service create --name demo alpine:latest ping 8.8.8.8
   ```

3. Verifica que tu servicio haya creado un contenedor en ejecución:

   ```console
   $ docker service ps demo
   ```

   Deberías ver algo como:

   ```shell
   ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
   463j2s3y4b5o        demo.1              alpine:latest       docker-desktop      Running             Running 8 seconds ago
   ```

4. Verifica que obtienes los registros esperados para un proceso de ping:

   ```console
   $ docker service logs demo
   ```

   Deberías ver la salida de un proceso de ping correcto:

   ```shell
   demo.1.463j2s3y4b5o@docker-desktop    | PING 8.8.8.8 (8.8.8.8): 56 data bytes
   demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=0 ttl=37 time=13.005 ms
   demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=1 ttl=37 time=13.847 ms
   demo.1.463j2s3y4b5o@docker-desktop    | 64 bytes from 8.8.8.8: seq=2 ttl=37 time=41.296 ms
   ...
   ```

5. Finalmente, elimina tu servicio de prueba:

   ```console
   $ docker service rm demo
   ```



## Conclusión

En este punto, has confirmado que puedes ejecutar cargas de trabajo contenedorizadas simples en Kubernetes y Swarm. El siguiente paso es escribir un archivo YAML que describa cómo ejecutar y gestionar estos contenedores.

- [Desplegar en Kubernetes](/guides/orchestration/kube-deploy/)
- [Desplegar en Swarm](/guides/orchestration/swarm-deploy/)

## Referencias de la CLI

Hay documentación adicional disponible para todos los comandos de la CLI utilizados en este artículo aquí:

- [`kubectl apply`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply)
- [`kubectl get`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#get)
- [`kubectl logs`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#logs)
- [`kubectl delete`](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#delete)
- [`docker swarm init`](/reference/cli/docker/swarm/init/)
- [`docker service *`](/reference/cli/docker/service/)

