Docker Daemonizar un Contenedor

Docker Daemonizar un contenedor
Docker daemonizar un contendor
Docker daemonizar un contendor

¿Qué significa daemonizar un contenedor?

Docker daemonizar un contenedor significa que vamos a dejarlo corriendo una vez creado, sin necesidad de haber instalado necesariamente un servicio.

En el post anterior vimos como crear un contenedor a partir de una imagen previamente descargada. https://blog.carreralinux.com.ar/2020/06/docker-imagenes-contenedores-instancias/.

El problema que observamos es que cuando salimos de la instancia, el contenedor queda en estado «Exited» podemos traducirlo como «Parado», por lo tanto es bastante poco lo que podemos hacer con él.

Para seguir avanzando vamos a crear un contenedor a partir de una imagen,  vamos a correr un comando que siga ejecutandose cuando hayamos salido de la instancia. A esto le llamamos Docker daemonizar un Contenedor.

Antes de seguir veamos cuales son los contenedores que tenemos y cuales estan «Exited», para esto vamos a usar el comando:  docker ps -a

 

[pastacode lang=»markup» manual=»docker%20ps%20-a%0ACONTAINER%20ID%20%20%20%20%20%20%20%20IMAGE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20COMMAND%20%20%20%20%20%20%20%20%20%20%20%20%20CREATED%20%20%20%20%20%20%20%20%20%20%20%20%20STATUS%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20PORTS%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAMES%0Aec3d1110711a%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22%2Fbin%2Fbash%22%20%20%20%20%20%20%20%20%202%20days%20ago%20%20%20%20%20%20%20%20%20%20Exited%20(0)%202%20days%20ago%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20dazzling_bouman%0Afa90da468347%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22%2Fbin%2Fbash%22%20%20%20%20%20%20%20%20%202%20days%20ago%20%20%20%20%20%20%20%20%20%20Exited%20(130)%202%20days%20ago%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20festive_khayyam%0Aed5df8e5b132%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22bash%22%20%20%20%20%20%20%20%20%20%20%20%20%20%202%20days%20ago%20%20%20%20%20%20%20%20%20%20Exited%20(0)%202%20days%20ago%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20friendly_ride%0A1a5e3742bcc9%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22bash%22%20%20%20%20%20%20%20%20%20%20%20%20%20%202%20days%20ago%20%20%20%20%20%20%20%20%20%20Exited%20(0)%202%20days%20ago%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20crazy_turing%0Afabian%40D10-docker%3A~%24%20%0A» message=»docker ps -a» highlight=»» provider=»manual»/]

Lo que estamos observando es que tenemos algunas instancias que estan paradas y que no vamos a usar porque son las que usamos para hacer pruebas. Por lo tanto las vamos a eliminar.

[pastacode lang=»markup» manual=»docker%20rm%20crazy_turing%20dazzling_bouman%20festive_khayyam%20friendly_ride%20%0Acrazy_turing%0Adazzling_bouman%0Afestive_khayyam%0Afriendly_ride%0A» message=»docker rm crazy_turing dazzling_bouman festive_khayyam friendly_ride » highlight=»» provider=»manual»/]

Observamos ahora como queda nuestro repositorio de contenedores local luego de borrar.

[pastacode lang=»markup» manual=»docker%20ps%20-a%0ACONTAINER%20ID%20%20%20%20%20%20%20%20IMAGE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20COMMAND%20%20%20%20%20%20%20%20%20%20%20%20%20CREATED%20%20%20%20%20%20%20%20%20%20%20%20%20STATUS%20%20%20%20%20%20%20%20%20%20%20%20%20%20PORTS%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAMES%0A» message=»docker ps -a» highlight=»» provider=»manual»/]

Ahora que no tenemos ninguna instacia corriendo podemos consultar cuales son las imagenes que tenemos descargadas, para esto utilizamos el comando:  docker images

[pastacode lang=»markup» manual=»~%24%20docker%20images%0AREPOSITORY%20%20%20%20%20%20%20%20%20%20TAG%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20IMAGE%20ID%20%20%20%20%20%20%20%20%20%20%20%20CREATED%20%20%20%20%20%20%20%20%20%20%20%20%20SIZE%0Adebian%20%20%20%20%20%20%20%20%20%20%20%20%20%20buster%20%20%20%20%20%20%20%20%20%20%20%20%20%205971ee6076a0%20%20%20%20%20%20%20%203%20weeks%20ago%20%20%20%20%20%20%20%20%20114MB%0A» message=»docker images» highlight=»» provider=»manual»/]

Como vemos en nuestro repositorio local de imágenes encontramos debian:buster vamos a utilizar esta para crear un contenedor daemonizado.

¿Cómo daemonizar?

Doker daemonizar un contenedor significa que el mismo no termine cuando lo lanzamos como por ejemplo el comando while o el comando tail veamos un ejemplo de cada uno al correr dos contenedores.

Ejemplo 1: Corremos un contenedor ejecutando el comando while para que no se apague cuando salgamos. El comando es el siguiente:

[pastacode lang=»markup» manual=»docker%20run%20-d%20debian%3Abuster%20%20%5C%0A%3E%20%2Fbin%2Fbash%20-c%20%22while%20true%3B%20do%20echo%20Hola%20Mundo%3B%20sleep%202%3B%20done%22%0A55ed8cdec8620af82fe15bd6c395b6d24b87806ff3aa2fc525f3c8dcc02fa30e%0A» message=»docker run -d debian:buster \ > /bin/bash -c «while true; do echo Hola Mundo; sleep 2; done»» highlight=»» provider=»manual»/]

Para saber que la instancia esta corriendo volvemos a ejecutar el comando: docker ps -a 

[pastacode lang=»markup» manual=»%20docker%20ps%20-a%0ACONTAINER%20ID%20%20%20%20%20%20%20%20IMAGE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20COMMAND%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CREATED%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATUS%20%20%20%20%20%20%20%20%20%20%20%20%20%20PORTS%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAMES%0A55ed8cdec862%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22%2Fbin%2Fbash%20-c%20’while%E2%80%A6%22%20%20%20About%20a%20minute%20ago%20%20%20Up%20About%20a%20minute%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20unruffled_greider%0A» message=»docker ps -a» highlight=»» provider=»manual»/]

Los parámetros utilizados son:

-d: Ejecutar el contenedor y daemonizarlo
-c: El comando que vamos a ejecutar.

Para acceder a la instancia (contenedor corriendo) usamos el comando docker exec con sus respectivos parámetros

[pastacode lang=»markup» manual=»docker%20exec%20-it%20unruffled_greider%20%2Fbin%2Fbash%0Aroot%4055ed8cdec862%3A%2F%23%20%0A» message=»docker exec -it unruffled_greider /bin/bash» highlight=»» provider=»manual»/]

Los parámetros utilizados son:

exec: ejecutar un comando
-i: interactivo
-t: tty  obtener una pseudo-terminal

Para verificar que esta corriendo salimos ejecutando el comando exit y volvemos a ejecutar el comando docker ps -a.

[pastacode lang=»markup» manual=»CONTAINER%20ID%20%20%20%20%20%20%20%20IMAGE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20COMMAND%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CREATED%20%20%20%20%20%20%20%20%20%20%20%20%20STATUS%20%20%20%20%20%20%20%20%20%20%20%20%20%20PORTS%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAMES%0A55ed8cdec862%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22%2Fbin%2Fbash%20-c%20’while%E2%80%A6%22%20%20%208%20minutes%20ago%20%20%20%20%20%20%20Up%208%20minutes%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20unruffled_greider%0A» message=»doker ps -a» highlight=»» provider=»manual»/]

Vamos a utilizar ahora otro comando para daemonizar creando una segunda instancia de la imagen debian:buster.

[pastacode lang=»markup» manual=»docker%20run%20-d%20debian%3Abuster%20%20%2Fbin%2Fbash%20-c%20%22tail%20-f%20%2Fdev%2Fnull%22%0Ab526fd0c9cbbeb8e4e8ac1f386699e084e967e208e941a87c02954e4e89283b5%0A» message=»docker run -d debian:buster /bin/bash -c «tail -f /dev/null»» highlight=»» provider=»manual»/]

Volvemos a ejecutar el comando docker ps -a para verificar que las dos instancias estan corriendo.

[pastacode lang=»markup» manual=»%24%20docker%20ps%20-a%0ACONTAINER%20ID%20%20%20%20%20%20%20%20IMAGE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20COMMAND%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CREATED%20%20%20%20%20%20%20%20%20%20%20%20%20%20STATUS%20%20%20%20%20%20%20%20%20%20%20%20%20%20PORTS%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20NAMES%0Ab526fd0c9cbb%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22%2Fbin%2Fbash%20-c%20’tail%20%E2%80%A6%22%20%20%20About%20a%20minute%20ago%20%20%20Up%20About%20a%20minute%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20objective_golick%0A55ed8cdec862%20%20%20%20%20%20%20%20debian%3Abuster%20%20%20%20%20%20%20%22%2Fbin%2Fbash%20-c%20’while%E2%80%A6%22%20%20%2011%20minutes%20ago%20%20%20%20%20%20%20Up%2011%20minutes%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20unruffled_greider%0A» message=»docker ps -a» highlight=»» provider=»manual»/]

 

Recorda que para usar docker hub vas a tener que ingresar al siguiente link: https://hub.docker.com