Gestión de contenedores Docker
Ciclo de vida de los contenedores
Para ver un ejemplo de los comandos que gestionan el ciclo de vida de un contenedor vamos a ejecutar un contenedor demonio que va escribiendo la hora cada segundo, para ver la salida visualizamos sus logs:
$ docker run -d --name hora-container ubuntu bash -c 'while true; do echo $(date +"%T"); sleep 1; done'
$ docker logs -f hora-container
En otra terminal vamos ejecutando los comandos que nos permiten controlar su ciclo de vida:
docker start
: Inicia la ejecución de un contenedor que está parado.docker stop
: Detiene la ejecución de un contenedor en ejecución.docker restart
: Para y vuelve a iniciar la ejecución de un contenedor.docker pause
: Pausa la ejecución de un contenedor.docker unpause
: Continúa la ejecución de un contenedor que estaba pausado..
Ejecución de comandos en contenedores
Si tenemos un contenedor que está iniciado, podemos ejecutar comandos en él con docker exec
. En esta ocasión vamos a crear un contenedor que hace algo parecido al anterior, pero en este caso guarda la hora en un fichero cada segundo:
$ docker run -d --name hora-container2 ubuntu bash -c 'while true; do date +"%T" >> hora.txt; sleep 1; done'
$ docker exec hora-container2 ls
...
hora.txt
...
$ docker exec hora-container2 cat hora.txt
Copiar ficheros en contenedores
Con el comando docker cp
podemos copiar ficheros a o desde un contenedor. Por ejemplo, si tengo un fichero en mi equipo lo puedo copiar al contenedor:
$ echo "Curso Docker">docker.txt
$ docker cp docker.txt hora-container2:/tmp
Successfully copied 2.05kB to hora-container2:/tmp
Podemos comprobar que el fichero existe en el contenedor:
$ docker exec hora-container2 cat /tmp/docker.txt
Curso Docker
Evidentemente, también podemos copiar ficheros desde el contenedor a nuestro equipo:
docker cp hora-container2:hora.txt .
Successfully copied 5.63kB to /home/usuario/.
Visualizar procesos que se ejecutan en un contenedor
Podemos visualizar los procesos que se están ejecutando en un contenedor con el comando docker top
:
$ docker top hora-container2
Obtener información de los contenedores
Para obtener información de cualquier objeto Docker vamos a usar el subcomando inspect
. En el caso de los contenedores, ejecutamos:
$ docker inspect hora-container2
Nos muestra mucha información en formato JSON (JavaScript Object Notation) y nos da datos sobre aspectos como:
- El id del contenedor.
- Los puertos abiertos y sus redirecciones.
- Los bind mounts y volúmenes usados.
- El tamaño del contenedor (si ejecutamos
docker inspect -s
). - La configuración de red del contenedor.
- El comando que se esta ejecutando en el contenedor.
- El valor de las variables de entorno.
- Y muchas más cosas….
Como nos devuelve mucha información podemos filtrar los campos que nos interesan, por ejemplo:
El identificado del contenedor:
$ docker inspect --format='{{.Id}}' hora-container2
El nombre de la imagen que hemos usado para crear el contenedor:
$ docker inspect --format='{{.Config.Image}}' hora-container2
El valor de las variables de entorno definidas en el contenedor:
$ docker container inspect -f '{{range .Config.Env}}{{println .}}{{end}}' hora-container2
El comando que hemos ejecutado en el contenedor:
$ docker inspect --format='{{range .Config.Cmd}}{{println .}}{{end}}' hora-container2
La dirección IP que tiene el contenedor:
$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' hora-container2