Objetivos

Al finalizar el tutorial el estudiante estará en capacidad de:

Requisitos para desarrollar el tutorial

Para poder desarrollar este tutorial, necesita docker en su máquina local, en caso de que no lo tenga instalado diríjase al siguiente enlace: Instalar docker. Allí da click a la opción que corresponda a su sistema operativo, en las siguientes secciones se realiza la instalación paso a paso para (Windows, Ubuntu y Mac), identifique la suya y siga las instrucciones.

(Nota: La instalación fue realizada con macOS monterrey)

En la página Instalar docker de click en la opción Apple chip, inmediatamente se iniciara la instalación de un archivo llamado Docker.dmg, este tomará unos minutos, espere a que finalice y luego ábralo.

Arrastre la ventana de la aplicación instalada hacia el folder de aplicaciones en su computadora, valide su correcta instalación, abriendo la aplicación. Podrá ver la siguiente ventana:

Al abrirla estará iniciando automáticamente el docker daemon este se encarga de escuchar las solicitudes de la API de docker con el fin de administrar las redes, imágenes y contenedoras entre otros recursos. Abra su terminal y ejecute el siguiente comando:

user@192 ~ % sudo docker run hello-world

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Felicidades, ahora cuenta con docker instalado en su máquina.

(Nota: La instalación fue realizada con windows 10)

En la página Instalar docker de click al símbolo de windows, allí se iniciará la descarga de un archivo .exe, espere unos segundos a que termine la descarga y de click al archivo.

Una vez le de click al archivo .exe se abrirá una ventana donde podrá ver una opción de configuración asociada a WSL2, este es un subsistema de linux para windows necesario para poder usar docker, seleccione ambos checkbox y presione ok.

Posteriormente se iniciará la instalación de archivos necesarios para correr el programa, esto puede tardar algunos minutos.

Una vez la instalación termine busque la aplicación y ábrala, puede que se encuentre con el siguiente mensaje :

Esto se debe a que si bien se instalaron algunos binarios del wsl2, aún faltan algunas configuraciones. Para terminar la instalación diríjase al siguiente link WSL2 Linux kernel update package for x64 machines, ahí se descargará un archivo con extensión msi, ábralo para empezar la actualización de wsl2, podrá esperar una ventana como esta:

Oprima next y finalizar, luego de esto reinicie el computador y vuelva a abrir la aplicación de docker desktop. Al abrirla estará iniciando automáticamente el docker daemon, este se encarga de escuchar las solicitudes de la API de docker con el fin de administrar las redes, imágenes y contenedoras entre otros recursos.

Finalmente, abra una terminal y ejecute el comando:

C:\Users\student> docker run hello-world

Al ejecutarlo en consola podrá ver lo siguiente:

C:\Users\student> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:62af9efd515a25f84961b70f973a798d2eca956b1b2b026d0a4a63a3b0b6a3f2
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Felicidades, ahora cuenta con docker instalado en su máquina.

(Nota: La instalación fue realizada con ubuntu 20.04)

Abra una terminal y actualice los paquetes del sistema mediante el comando sudo apt-get update:

user@192 ~ % sudo apt-get update

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % sudo apt-get update
Get:1 http://ports.ubuntu.com/ubuntu-ports jammy InRelease [270 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports jammy-updates InRelease [114 kB]
Get:3 http://ports.ubuntu.com/ubuntu-ports jammy-backports InRelease [99.8 kB]
Get:4 http://ports.ubuntu.com/ubuntu-ports jammy-security InRelease [110 kB]
Get:5 http://ports.ubuntu.com/ubuntu-ports jammy/main arm64 Packages [1758 kB]
Get:6 http://ports.ubuntu.com/ubuntu-ports jammy/universe arm64 Packages [17.2 MB]
...

Actualice el índice de paquetes para permitir que apt-get use un repositorio a través de https, cuando en la terminal le consulten si quiere seguir, oprima el carácter [y]. Ejecute el siguiente comando:

user@192 ~ % sudo apt-get install ca-certificates curl gnupg lsb-release

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % sudo apt-get install ca-certificates curl gnupg lsb-release
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  dirmngr distro-info-data gnupg-l10n gnupg-utils gpg gpg-agent gpg-wks-client
  gpg-wks-server gpgconf gpgsm libassuan0 libbrotli1 libcurl4 libexpat1
  libksba8 libldap-2.5-0 libldap-common libmpdec3 libnghttp2-14 libnpth0
  libpsl5 libpython3-stdlib libpython3.10-minimal libpython3.10-stdlib
...
Do you want to continue? [Y/n] y

Posteriormente agregue la llave GPG oficial de docker mediante los siguientes comandos:

user@192 ~ % sudo mkdir -p /etc/apt/keyrings
user@192 ~ % curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Ejecute el siguiente comando para configurar el repositorio:

user@192 ~ % echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Posteriormente instale el motor de docker, ante alguna validación durante la ejecución del comando oprima [y]

user@192 ~ % sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Para validar la instalación ejecute el comando docker version

, deberá ver lo siguiente si la instalación fue exitosa:

user@192 ~ % docker version

Deberá ver lo siguiente si la instalación fue exitosa::

user@192 ~ % docker version
Client: Docker Engine - Community
 Version:           20.10.18
 API version:       1.41
 Go version:        go1.18.6
 Git commit:        b40c2f6
 Built:             Thu Sep  8 23:10:58 2022
 OS/Arch:           linux/arm64
 Context:           default
 Experimental:      true
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Como puede ver la instalación fue exitosa, ahora tenemos la versión 20.10.18 en nuestras máquinas, sin embargo el Docker daemon no ha sido encendido, para encenderlo ejecute el comando sudo service docker start

, luego de esto corra el comando sudo docker run hello-world.

user@192 ~ % sudo service docker start
user@192 ~ % sudo docker run hello-world

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % sudo service docker start
user@192 ~ % sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (arm64v8)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Felicidades, ahora cuenta con docker instalado en su máquina.

Una forma de validar que contenedores están corriendo actualmente en su computadora es usando el comando docker ps:

user@192 ~ % docker ps

Como puede ver después de ejecutar el comando aún no tenemos ninguna contenedora corriendo.

user@192 ~ % docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
user@192 ~ %

Luego ejecute el comando docker images, este le permitirá ver las imágenes que tiene descargadas en su máquina:

user@192 ~ % docker images

Como puede ver después de ejecutar el comando aún no tenemos ninguna imagen descargada.

user@192 ~ % docker images
REPOSITORY       TAG       IMAGE ID       CREATED        SIZE
user@192 ~ %

Para correr una contenedora, primero necesitamos una imagen, podemos usar una imagen pública de Python para el ejemplo, recuerde que docker nos permite descargar imágenes públicas o privadas (si se cuenta con los permisos) de software empaquetado a una máquina, donde está, tiene diversas capas que se utilizan con el objetivo de ejecutar un código dentro de un contenedor. Ejecute el siguiente comando para descargar una imagen de Python:

user@192 ~ % docker pull python

Luego de ejecutarlo podrá ver lo siguiente:

user@192 ~ % docker pull python
Using default tag: latest
latest: Pulling from library/python
172730635f67: Pull complete
f37c953a37e9: Pull complete
98802a15fc60: Pull complete
9aff223bb11e: Pull complete
a010bc6bf075: Pull complete
2144e50caca0: Pull complete
fb2fec81b6ef: Pull complete
1cfe14b81acd: Pull complete
6b06c265cd54: Pull complete
Digest: sha256:7d6892dc8001a9c0ce2201f9c028b9b6012c7fccf5f8c5d17883b3aafeb799db
Status: Downloaded newer image for python:latest
docker.io/library/python:latest

Observe que se ve información del tag "latest" , el origen del repositorio "docker.io", el nombre de la imagen "docker.io/librery/python" y lineas donde se observa un hash seguido del mensaje "Pull complete", estas son capas de la imagen, se retomará este concepto más adelante en este tutorial.

Para continuar diríjase al siguiente repositorio y encontrará el código de la aplicación que usaremos en este tutorial. Por otro lado, Github puede ser usado como repositorio de imágenes públicas o privadas en la nube, en el siguiente link podrá encontrar las imágenes creadas para el código de ese repositorio.

Para este tutorial usaremos la imagen llamada s1-hello-students, allí usted podrá ver en la sección de tags las versiones v0.0.1, v0.0.2 y v0.0.3.

Dentro de docker las imágenes pueden tener un tag, con el fin de tener un registro en cambios de funcionalidades, para este ejercicio primero descargue la versión 0.0.1 mediante el comando docker pull <IMAGEN:TAG>:

user@192 ~ % docker pull ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.1

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker pull ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.1: Pulling from ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-hello-students
213ec9aee27d: Pull complete 
a812a649b697: Pull complete 
ca485ad162fc: Pull complete 
5664861ebdd6: Pull complete 
d20ebef2fbe5: Pull complete 
4f4fb700ef54: Pull complete 
Digest: sha256:6744333d41cd44f2ba3760f1d0e344fff6d045920e78fb9de37aacded20f4e9f
Status: Downloaded newer image for ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.1
ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.1
user@192 ~ %

Si ejecuta el comando docker images, podrá obtener una lista de las imágenes descargadas en su máquina, con su respectivo repositorio, tag , id de la imagen , fecha de creación y tamaño de la misma.

user@192 ~ % docker images 

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students  v0.0.1    807ab81061ac   21 minutes ago   167MB
user@192 ~ %

Para correr la imagen de la versión v0.0.1 en una contenedora ejecute el siguiente comando:

user@192 ~ % docker run ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.1

En caso de que usted se encuentre en un computador con arquitectura arm64 simplemente agregue al comando

–platform=linux/amd64

a la instrucción del docker run.

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker run ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.1
Bienvenidos al curso desarrollo de aplicaciones nativas en la nube versión 0.0.1
user@192 ~ %

Como puede observar en la salida de la consola, un mensaje de bienvenida es desplegado indicando la versión de la imagen asociada, proseguiremos con la siguiente versión para ver la diferencia, ejecute el mismo comando del paso anterior pero con la nueva referencia a la versión v0.0.2:

user@192 ~ % docker pull ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker pull ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2
0.0.2: Pulling from ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2
213ec9aee27d: Already exists 
a812a649b697: Already exists 
ca485ad162fc: Already exists 
5664861ebdd6: Already exists 
2be54c402705: Pull complete 
4f4fb700ef54: Pull complete 
Digest: sha256:ae3a51b19cf653516e5cf4d9c846cfcff47a6b049dac45663b9c2efba2f55f3e
Status: Downloaded newer image for ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2
ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2
user@192 ~ %

Observe que en la imagen para las primeras 4 líneas de ejecución muestra el mensaje: "Already exists" esto se debe a que todas las imágenes en Docker están compuestas por capas, cada capa representa un cambio importante en el sistema de archivos del contenedor y estas a su vez pueden ser compartidas entre distintas imágenes.

Una vez realizado el pull de la imagen, si ejecuta nuevamente el comando docker images podrá notar la presencia de las dos imágenes descargadas en su máquina.

user@192 ~ % docker images
REPOSITORY                 TAG       IMAGE ID       CREATED          SIZE
ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students  v0.0.1    9bbf22b902e7   31 minutes ago   167MB
ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students  v0.0.2    807ab81061ac   32 minutes ago   167MB
user@192 ~ %

Para correr la imagen de la versión v0.0.2 en una contenedora ejecute el siguiente comando:

user@192 ~ % docker run ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker run ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:v0.0.2
Bienvenidos al curso desarrollo de aplicaciones nativas en la nube versión 0.0.2
user@192 ~ %

(Si desea leer mas al respecto de docker pull diríjase a este link )

Para esta sección debe hacer pull a la imagen del repositorio asociada a la versión v0.0.3. Copie y pegue el siguiente comando en consola:

user@192 ~ % docker pull ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker pull ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students
Using default tag: latest
latest: Pulling from ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students
213ec9aee27d: Pull complete 
a812a649b697: Pull complete 
ca485ad162fc: Pull complete 
5664861ebdd6: Pull complete 
d20ebef2fbe5: Pull complete 
4f4fb700ef54: Pull complete 
Digest: sha256:6744333d41cd44f2ba3760f1d0e344fff6d045920e78fb9de37aacded20f4e9f
Status: Downloaded newer image for ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:latest
ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:latest
user@192 ~ %

Se preguntará por qué no usamos el tag v0.0.3 en el comando, puede hacerlo como los pasos anteriores si así lo prefiere, sin embargo al ser la última versión del repositorio, docker por defecto si usted no indica una versión a descargar, buscará la que tenga el tag latest y la bajara. En nuestro ejemplo coincide con el mismo código desarrollado en python del tag v0.0.3.

Al ejecutarlo podrá ver los mismos mensajes donde se reusan capas descargandose de forma similar a los pasos anteriores, sin embargo para la versión v0.0.3 / latest no se va a soportar la impresión del mensaje inmediatamente, en cambio, esta manejará un flujo de logs de manera indefinida.

Luego de instalar la imagen, la vamos a correr de forma similar pero agregando los parámetros -d -t , estos dos flags nos ayudarán a correr la imagen en el background y no bloquear la terminal actual (Recuerde que la versión v0.0.3 / latest está generando logs indefinidamente hasta que la contenedora se detenga, por eso debemos ejecutarla en un proceso aparte).

user@192 ~ % docker run -d -t ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker run -d -t ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students
092f94764aafe8e059bc695fee41cdddb6b39dcecd1d1fa0b23fbc36bc8e1ca5
user@192 ~ %

Note que al ejecutar los comandos anteriores, la terminal nos responde con un hash correspondiente al container_id en ejecución.

Ejecute el comando docker ps para ver los contenedores en ejecución:

user@192 ~ % docker ps

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker ps
CONTAINER ID            IMAGE                             COMMAND            CREATED         STATUS      PORTS     NAMES
092f94764aaf    ghcr.io/../s1-tutorial-hello-students:latest   "python3 app.py"   4 minutes ago   Up 4 minutes             elegant_tereshkova

Como puede observar nos indica datos como el id de la contenedora, el nombre de la imagen, el comando que ejecuta para levantar la aplicación, cuando fue creada y el status entre otros datos relevantes. Para ver los logs de lo que está sucediendo en la aplicación dentro del container, ejecute el comando docker logs seguido del id del contenedor:

user@192 ~ % docker logs <container id>

Para este ejemplo el comando resultado es:

user@192 ~ % docker logs 092f94764aaf

Al ejecutarlo podrá ver lo siguiente:

user@192 ~ % docker logs 092f94764aaf
Bienvenidos al curso desarrollo de aplicaciones nativas en la nube versión 0.0.3
Consulta de logs contenedora versión 0.0.3 a las 13:41:03
Consulta de logs contenedora versión 0.0.3 a las 13:41:05
Consulta de logs contenedora versión 0.0.3 a las 13:41:07
Consulta de logs contenedora versión 0.0.3 a las 13:41:09
user@192 ~ %

Note que se están generando logs dentro de la contenedora en tiempo de ejecución, este comando es funcional únicamente cuando el contenedor ha sido iniciado.

(Si desea leer mas al respecto de docker logs diríjase a este link )

Para ver estadísticas asociadas al contenedor, ejecute el comando docker stats seguido por el id del contenedor :

user@192 ~ % docker stats <container id>

Para este ejemplo el comando resultado es:

user@192 ~ % docker stats 092f94764aaf

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker stats 092f94764aaf
CONTAINER ID   NAME           CPU %     MEM USAGE / LIMIT     MEM %     NET I/O       BLOCK I/O    PIDS
092f94764aaf   elated_curie   0.25%     27.61MiB / 7.653GiB   0.35%     1.51kB / 0B   0B / 246kB   2

Observe que se pueden ver métricas asociadas a CPU, uso de memoria, porcentaje de memoria y de red entre otras de interés. Una vez termine la consulta oprima CTRL + C para salir del proceso.

(Si desea leer mas al respecto de docker stats diríjase a este link )

El comando docker top seguido del id del contenedor, permite mostrar un listado de los procesos en ejecución en un contenedor:

user@192 ~ % docker top <container id>

Para este ejemplo el comando resultado es:

user@192 ~ % docker top 092f94764aaf

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker top 092f94764aaf
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3585                3560                0                   15:53               ?                   00:00:10            /usr/bin/qemu-x86_64 /usr/local/bin/python3 python3 app.py

Obtenemos datos como:

  1. PID: Abreviatura usada del process id, esta es un identificador de un proceso dentro de la contenedora.
  2. UID: Es una abreviatura de la palabra user identifier.
  3. PPID: El identificador del proceso padre (Process Parent ID).
  4. CMD: Comando encargado del proceso de definición del ejecutable de la imagen en una contenedora.

(Si desea leer mas al respecto de docker top diríjase a este link )

Docker inspect proporciona información detallada sobre las construcciones de las contenedoras en docker, el resultado por default de este comando está renderizado en formato JSON, observe algunos datos relevantes de la contenedora como:

  1. Created: Fecha y hora de creación de la contenedora con la respectiva imagen.
  2. Platform: Sistema operativo donde corre la imagen.
  3. PYTHON_VERSION: Versión de python encargada de correr la imagen.
  4. Name: Nombre asignado por docker a la imagen.
user@192 ~ % docker inspect <container id>

Para este ejemplo el comando resultado es:

user@192 ~ % docker inspect 092f94764aaf
[
    {
        "Id": "092f94764aafe8e059bc695fee41cdddb6b39dcecd1d1fa0b23fbc36bc8e1ca5",
        "Created": "2022-09-29T13:46:31.893761175Z",
        "Path": "python3",
        "Args": [
            "app.py"
        ],
        "Platform": "linux",
        "PYTHON_VERSION=3.8.14",
        "PYTHON_PIP_VERSION=22.0.4",
        "PYTHON_SETUPTOOLS_VERSION=57.5.0",
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 3585,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2022-09-29T13:46:32.0369503Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Cmd": [
                "python3",
                "app.py"
            ],

        "Image": "ghcr.io/misw-4301-desarrollo-apps-en-la-nube/s1-tutorial-hello-students:latest",
        "ResolvConfPath": "/var/lib/docker/containers/092f94764aafe8e059bc695fee41cdddb6b39dcecd1d1fa0b23fbc36bc8e1ca5/resolv.conf",
        "Name": "/inspiring_stonebraker",
        "HostnamePath": "/var/lib/docker/containers/092f94764aafe8e059bc695fee41cdddb6b39dcecd1d1fa0b23fbc36bc8e1ca5/hostname",
"/proc/sys",
  ...

(Si desea leer mas al respecto de docker inspect diríjase a este link )

Una vez termine el tutorial recuerde detener la contenedora para evitar continuar con el consumo de recursos, para esto use el comando docker stop seguido del id del contenedor, este comando emite un SIGTERM a la contenedora solicitando al proceso limpiar su estado y salir.

user@192 ~ % docker stop <container id>

Para este ejemplo el comando resultado es:

user@192 ~ % docker stop 092f94764aaf

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker stop 092f94764aaf
092f94764aaf
user@192 ~ % 

Como respuesta la terminal mostrará el id del contenedor detenido.

(Si desea leer mas al respecto de docker stop diríjase a este link )

A diferencia del comando docker stop que permite terminar todos los procesos de una contenedora con gracia (espera hasta terminarlos todos adecuadamente), el comando docker kill no le da al proceso del contenedor la oportunidad de salir con gracia, simplemente emite un SIGKILL para terminar el contenedor.

user@192 ~ % docker kill <container id>

Para este ejemplo el comando resultado es:

user@192 ~ % docker container kill 092f94764aaf

Al ejecutarlo en consola podrá ver lo siguiente:

user@192 ~ % docker container kill 092f94764aaf
092f94764aaf
user@192 ~ % 

Este comando es un poco más invasivo por la razón que se explicó anteriormente, no le da la oportunidad a la contenedora de terminar y limpiar sus procesos. Sin embargo es de gran utilidad cuando una contenedora está congelada y no responde al comando docker stop.

(Si desea leer mas al respecto de docker kill diríjase a este link )

[1] "Docker," Docker Documentation, 29-Sep-2022. [Online]. Available: https://docs.docker.com/engine/reference/commandline/docker/. [Accessed: 30-Sep-2022].

[2] Google docs: Sign-in. [Online]. Available: https://docs.google.com/document/d/1cXfGVZJJHmiD-s3QTlVZrT4zWpDMAaPyNNNEUNylr_c/edit#heading=h.catckqbp3e8n. [Accessed: 30-Sep-2022].