Ejecute contenedores de forma continua en segundo plano con Docker

Ejecute contenedores de forma continua en segundo plano con Docker

Docker sale automáticamente de un contenedor cuando se ejecuta en segundo plano; sin embargo, habrá ciertas instancias en las que debemos asegurarnos de que la instancia continúe ejecutándose a pesar de que el proceso haya finalizado. Este artículo discutirá cómo podemos continuar ejecutando contenedores docker en segundo plano.

Ejecutar contenedores Docker en segundo plano

Si queremos simplificar la forma de ejecutar contenedores, debemos ejecutar nuestro contenedor en segundo plano con lo siguiente:

docker run -d image sample

En lugar de ejecutar con el siguiente:

docker run -i -t image sample

Se recomienda usar -d porque podemos ejecutar nuestro contenedor con solo un comando, y no necesitamos desconectar la terminal del contenedor presionando Ctrl+P + < kbd>Q.

Sin embargo, hay un problema con el parámetro -d. Como resultado, nuestro contenedor se detiene inmediatamente a menos que los comandos no se estén ejecutando en primer plano.

Expliquemos esto usando un caso en el que queremos ejecutar un Servicio Apache en un contenedor. La forma intuitiva de hacer esto es:

docker run -d apache-server apachectl start

Sin embargo, el contenedor iniciado se detiene de inmediato porque apachectl sale una vez que desconecta el Apache Daemon.

A Docker no le gusta esto. Docker requiere que nuestro comando siga ejecutándose en primer plano; de lo contrario, cree que nuestra aplicación se detiene y apaga el contenedor.

Ejecutar contenedores en primer plano

Podemos solucionar esto ejecutando directamente el ejecutable de apache con la opción de primer plano.

docker run -d apache-server /usr/sbin/apache2 -D NO_DETACH -D FOREGROUND

Aquí, hacemos manualmente lo que apachectl hace por nosotros y ejecutamos el ejecutable de apache. Con este enfoque, apache sigue ejecutándose en primer plano.

Nuevamente, recuerde que el proceso difiere para cada imagen basada en Unix.

El problema es que alguna aplicación no se ejecuta en primer plano. Además, necesitamos hacer trabajo adicional, como exportar variables de entorno nosotros mismos.

En esta situación, podemos agregar tail -f /dev/null a su comando. Nuestro contenedor no se detiene porque la cola sigue corriendo en primer plano.

Podemos utilizar esta técnica en nuestro caso anterior.

docker run -d apache-server apachectl start && tail -f /dev/null

Dado que tail -f /dev/null no nos hace daño, podemos usar esta solución para cualquier aplicación.

Ejecutar contenedores indefinidamente

Otra forma sencilla de mantener vivo un contenedor indefinidamente en modo daemon -d es ejecutar sleep infinity como argumento del contenedor. Esto es independiente de realizar acciones extrañas como asignar un TTY en modo daemon.

Aunque el comando es peculiar, como hacer de sleep su comando predeterminado.

docker run -d apache-server sleep infinity

Además, el parámetro -t asigna un pseudo-tty y también debería funcionar. Esto manipula a bash para que continúe ejecutándose porque cree que está conectado a un TTY interactivo.

docker run -t -d apache-server
Marion Paul Kenneth Mendoza avatar Marion Paul Kenneth Mendoza avatar

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

Artículo relacionado - Docker Container