Cómo usar el comando docker container kill para gestionar contenedores

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás a gestionar contenedores Docker utilizando el comando docker container kill. Comenzaremos creando y ejecutando un contenedor simple. Luego, explorarás cómo detener un contenedor en ejecución utilizando la señal predeterminada. Finalmente, aprenderás a terminar un contenedor usando señales personalizadas, tanto por nombre como por número, brindándote habilidades esenciales para controlar el ciclo de vida de tus contenedores Docker.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555111{{"Cómo usar el comando docker container kill para gestionar contenedores"}} docker/ps -.-> lab-555111{{"Cómo usar el comando docker container kill para gestionar contenedores"}} docker/stop -.-> lab-555111{{"Cómo usar el comando docker container kill para gestionar contenedores"}} docker/create -.-> lab-555111{{"Cómo usar el comando docker container kill para gestionar contenedores"}} docker/pull -.-> lab-555111{{"Cómo usar el comando docker container kill para gestionar contenedores"}} end

Crear y ejecutar un contenedor simple

En este paso, aprenderemos cómo crear y ejecutar un contenedor Docker básico. Un contenedor es una unidad estándar de software que empaqueta código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable en diferentes entornos de computación.

Primero, necesitamos descargar la imagen de Docker que utilizaremos. Usaremos la imagen ubuntu, que es un sistema operativo Ubuntu mínimo.

docker pull ubuntu

Este comando descarga la imagen ubuntu desde Docker Hub a tu máquina local. Deberías ver una salida que indique el progreso de la descarga.

Ahora que tenemos la imagen, podemos ejecutar un contenedor basado en ella. Ejecutaremos un comando simple dentro del contenedor.

docker run ubuntu echo "Hello from Docker!"

Analicemos este comando:

  • docker run: Este es el comando para ejecutar un nuevo contenedor.
  • ubuntu: Este es el nombre de la imagen que queremos usar.
  • echo "Hello from Docker!": Este es el comando que se ejecutará dentro del contenedor.

Cuando ejecutes este comando, Docker creará un nuevo contenedor a partir de la imagen ubuntu, ejecutará el comando echo dentro de él y luego el contenedor se detendrá. Deberías ver la salida Hello from Docker! en tu terminal.

Para ver los contenedores que se han ejecutado, incluyendo aquellos que han finalizado, puedes usar el comando docker ps -a.

docker ps -a

Este comando lista todos los contenedores, tanto en ejecución como detenidos. Deberías ver una entrada para el contenedor que acabas de ejecutar, con un estado de "Exited".

Detener un contenedor en ejecución usando la señal predeterminada

En el paso anterior, ejecutamos un contenedor que realizó un comando y luego finalizó. En este paso, ejecutaremos un contenedor que permanece activo y aprenderemos cómo detenerlo usando la señal predeterminada.

Primero, ejecutemos un contenedor que permanecerá activo. Usaremos nuevamente la imagen ubuntu, pero esta vez ejecutaremos un comando que espera indefinidamente.

docker run -d ubuntu sleep infinity

Analicemos el comando:

  • docker run: Comando para ejecutar un nuevo contenedor.
  • -d: Este flag ejecuta el contenedor en modo desatendido (detached), lo que significa que se ejecuta en segundo plano sin bloquear tu terminal.
  • ubuntu: La imagen a utilizar.
  • sleep infinity: El comando a ejecutar dentro del contenedor. sleep infinity es un comando que mantendrá el contenedor ejecutándose indefinidamente.

Después de ejecutar este comando, Docker mostrará el ID del contenedor. Este contenedor ahora se está ejecutando en segundo plano.

Para ver los contenedores en ejecución, usa el comando docker ps.

docker ps

Deberías ver una entrada para el contenedor que acabas de iniciar, con un estado de "Up" seguido del tiempo que lleva ejecutándose. Toma nota del CONTAINER ID o NAMES de este contenedor, ya que lo necesitaremos para detenerlo.

Ahora, detengamos el contenedor en ejecución usando el comando docker kill. Por defecto, docker kill envía la señal SIGKILL al proceso principal del contenedor. SIGKILL es una señal que termina inmediatamente un proceso y no puede ser capturada o ignorada.

Reemplaza <container_id_or_name> con el ID real o nombre de tu contenedor en ejecución (obtenido del resultado de docker ps).

docker kill <container_id_or_name>

Después de ejecutar este comando, el contenedor debería detenerse. Puedes verificarlo ejecutando docker ps nuevamente. El contenedor ya no debería aparecer en la lista de contenedores activos.

Para ver el contenedor detenido, puedes usar docker ps -a. Su estado ahora debería ser "Exited".

Crear y ejecutar otro contenedor

En el paso anterior, detuvimos un contenedor en ejecución usando la señal predeterminada. En este paso, crearemos y ejecutaremos otro contenedor que usaremos en los siguientes pasos para demostrar cómo detener un contenedor con señales personalizadas.

Ejecutaremos otro contenedor en modo desatendido (detached) usando la imagen ubuntu y el comando sleep infinity, como hicimos anteriormente.

docker run -d ubuntu sleep infinity

Este comando iniciará un nuevo contenedor en segundo plano que se ejecutará indefinidamente. Docker mostrará el ID del nuevo contenedor.

Para confirmar que el contenedor está en ejecución, usa el comando docker ps.

docker ps

Deberías ver el nuevo contenedor listado con un estado de "Up". Anota el CONTAINER ID o NAMES de este contenedor. Usaremos este ID o nombre en los siguientes pasos para detener el contenedor usando diferentes señales.

Este contenedor ahora está listo para que practiquemos el envío de diferentes señales a él.

Detener el contenedor usando una señal personalizada por nombre

En el paso anterior, iniciamos un contenedor que actualmente está en ejecución. En este paso, aprenderemos cómo detener este contenedor usando una señal específica indicada por su nombre.

El comando docker kill permite enviar una señal específica al proceso principal dentro de un contenedor. Por defecto, envía SIGKILL, pero puedes especificar otras señales. Una señal comúnmente usada para apagar aplicaciones de manera controlada es SIGTERM. SIGTERM es una señal que solicita a un proceso que termine. A diferencia de SIGKILL, los procesos pueden capturar SIGTERM y realizar operaciones de limpieza antes de salir.

Primero, identifica el ID o nombre del contenedor en ejecución del paso anterior usando docker ps.

docker ps

Ahora, usa el comando docker kill con el flag -s para especificar el nombre de la señal. Usaremos SIGTERM. Reemplaza <container_id_or_name> con el ID o nombre real de tu contenedor en ejecución.

docker kill -s SIGTERM <container_id_or_name>

Este comando envía la señal SIGTERM al proceso principal del contenedor especificado. Si la aplicación dentro del contenedor está diseñada para manejar SIGTERM, intentará apagarse de manera controlada. Si no maneja SIGTERM o no termina dentro de un tiempo determinado, Docker eventualmente enviará un SIGKILL para forzar la terminación.

Para verificar que el contenedor se ha detenido, ejecuta docker ps nuevamente.

docker ps

El contenedor ya no debería aparecer en la lista de contenedores en ejecución. También puedes usar docker ps -a para ver su estado, que debería ser "Exited".

Detener el contenedor usando una señal personalizada por número

En el paso anterior, detuvimos un contenedor usando un nombre de señal (SIGTERM). En este paso, aprenderemos cómo detener un contenedor usando una señal especificada por su número.

Cada señal tiene un número correspondiente. Por ejemplo, SIGKILL es la señal 9, y SIGTERM es la señal 15. Puedes encontrar una lista de señales y sus números en un sistema Linux usando el comando kill -l.

kill -l

Este comando mostrará una lista de nombres de señales y sus números correspondientes.

Ahora, ejecutemos otro contenedor que permanecerá en ejecución, similar a los pasos anteriores.

docker run -d ubuntu sleep infinity

Obtén el ID o nombre de este nuevo contenedor en ejecución usando docker ps.

docker ps

Ahora usaremos el comando docker kill con el flag -s, pero esta vez proporcionaremos el número de señal en lugar del nombre. Usemos el número de señal 9, que corresponde a SIGKILL. Reemplaza <container_id_or_name> con el ID o nombre real de tu contenedor en ejecución.

docker kill -s 9 <container_id_or_name>

Este comando envía la señal SIGKILL (número 9) al proceso principal del contenedor especificado. Como se mencionó anteriormente, SIGKILL termina el proceso inmediatamente.

Para verificar que el contenedor se ha detenido, ejecuta docker ps nuevamente.

docker ps

El contenedor ya no debería aparecer en la lista de contenedores en ejecución. También puedes usar docker ps -a para ver su estado, que debería ser "Exited".

El uso de números de señal puede ser útil en scripts o cuando necesitas ser preciso sobre la señal que se envía.

Resumen

En este laboratorio, aprendimos los pasos fundamentales para gestionar contenedores Docker utilizando el comando docker container kill. Comenzamos creando y ejecutando un contenedor simple basado en la imagen ubuntu, ejecutando un comando básico y observando su estado de terminación usando docker ps -a.

Posteriormente, exploramos cómo terminar un contenedor en ejecución. Primero demostramos cómo detener un contenedor usando la señal por defecto, y luego profundizamos en la flexibilidad del comando docker container kill terminando contenedores usando tanto nombres de señales personalizadas como sus valores numéricos correspondientes. Esta experiencia práctica nos proporcionó conocimientos útiles sobre el control del ciclo de vida de los contenedores Docker.