Generalmente los contenedores Docker se usan para arrancar servicios como Nginx, Apache, PHP-FPM, Redis, etc. Estos servicios se basan en entornos Alpine Linux, Debian u otros.
Cuando el contenedor arrancar con un servicio, su PID será el 1, pero si queremos realizar pruebas con un Debian pelado sin servicios.
¿Como vamos a arrancarlo sin que se nos pare el contenedor Docker?
Muy fácil, vamos a arrancar un contenedor Docker de la imagen base de Debian, lanzando un terminal bash como proceso principal.
1 2 3 4 5 6 7 8 9 10 11 12 |
sysadmin@admsistemas:~$ docker run -it --name "deb" -d debian:8 bash Unable to find image 'debian:8' locally 8: Pulling from library/debian 6a5a5368e0c2: Pull complete Digest: sha256:677f184a5969847c0ad91d30cf1f0b925cd321e6c66e3ed5fbf9858f58425d1a Status: Downloaded newer image for debian:8 bea274ef0e24fb0ad3a8abe918dd533858a7c4e69f54be0a48124c0a85a1444e sysadmin@admsistemas:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bea274ef0e24 debian:8 "bash" 44 seconds ago Up 43 seconds deb |
Ahora podemos ver como el PID número 1 corresponde a un terminal bash, pero si entramos dentro del contenedor vamos a abrir un bash independiente, con lo cual si salimos y entramos no se detendrá el contenedor al no finalizar el PID 1. Nuestro bash dentro del contenedor para trabajar y realizar pruebas será el que tiene PID 7.
1 2 3 4 5 6 7 8 9 10 11 12 |
sysadmin@admsistemas:~$ docker exec -it deb bash root@bea274ef0e24:/# ps faux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 7 1.0 0.0 20244 3120 ? Ss 16:28 0:00 bash root 13 0.0 0.0 17496 2084 ? R+ 16:28 0:00 \_ ps faux root 1 0.0 0.0 20244 3076 ? Ss+ 16:28 0:00 bash root@bea274ef0e24:/# exit sysadmin@admsistemas:~$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bea274ef0e24 debian:8 "bash" 6 minutes ago Up 6 minutes deb |