GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

¡Use contenedores Docker Stop sin arruinar las cosas!

¿Tiene problemas con los contenedores de parada de Docker? Encontrar la forma correcta de detener un contenedor es difícil con la capacidad de crear muchos contenedores diferentes. En este artículo, aprenderá los comandos de Docker para detener un contenedor o todos los contenedores.

¡Sigue leyendo para obtener más información!

Requisitos

Para seguir este tutorial, asegúrese de tener lo siguiente:

  • Windows 10:el tutorial usa Windows para ejecutar Docker, pero también puede aplicar los mismos pasos generales a Linux o macOS.
  • Escritorio Docker – Este tutorial utiliza la versión 3.5.2. El motor Docker está disponible si está en Linux, ya que la GUI no lo está.
  • Un contenedor o contenedores de Docker en ejecución.

Contenedores finales con el comando docker stop Containers

Comencemos con el primer comando:docker stop el comando de contenedores y cómo logra detener los contenedores.

Por ejemplo, tal vez necesite detener un contenedor en ejecución con el nombre mystifying_hofstadter y una ID de fb66ed502096 . Como se muestra en el siguiente ejemplo, detenga el contenedor con docker stop comando contenedores.

# Stop the container via the name
docker stop mystifying_hofstadter
# Stop the container via the ID (same container)
docker stop fb66ed50209

¿Qué sucede si tiene varios contenedores en ejecución y desea detenerlos? La docker stop El comando de contenedores admite la detención de varios ID de contenedores, uno a la vez.

Primero, enumere todos los contenedores a través de docker ps comando y pase los ID de contenedor a docker stop comando contenedores, como se muestra a continuación.

# List all running containers
docker ps
# Stop the following Docker containers via the container ID
docker stop a427a21c5558 e9dbd816f24c 31269ef5999e

¿Qué sucede si desea detener todos los contenedores en ejecución sin recuperar los ID de contenedor manualmente y pasarlos a docker stop? ? El docker ps -q el comando logrará eso. El -q parámetro de docker ps El comando genera solo los ID de los contenedores.

# Create three containers. A semi-colon separates each command
docker run -d -t ubuntu; docker run -d -t ubuntu; docker run -d -t ubuntu
# List all running containers
docker ps -q
# Retrieve all running container IDs and pass those to docker stop
docker stop $(docker ps -q)

El $(docker ps -q) La construcción anterior es una subexpresión tanto en Bash en Linux como en PowerShell en Windows. Una subexpresión le indica al shell que procese un conjunto de comandos, docker ps -q , primero y luego devolver el conjunto de resultados al comando original docker stop .

La docker stop El comando container usa la señal SIGTERM. Las señales de Linux informan a un proceso de un evento, pero depende del proceso decidir cómo actuar ante una señal determinada.

Cuando se usa la señal SIGTERM, Docker usa la señal para detener correctamente un proceso esperando un 10 predeterminado segundos antes de enviar la señal SIGKILL, que termina el proceso inmediatamente.

Detención de un contenedor mediante señales de proceso

Aprendió sobre el comportamiento predeterminado de Docker (señal de parada), con docker stop comandos de contenedores, al detener un contenedor. Pero es posible que no desee el comportamiento predeterminado. En su lugar, puede indicarle a Docker que use señales de parada alternativas.

Con docker run comandos --stop-signal bandera, puede especificar la señal de parada al iniciar el contenedor. Esta bandera establece la señal que se enviará al contenedor en ejecución cuando desee que se detenga.

En el siguiente ejemplo, --stop-signal flag toma el valor SIGQUIT , que le dice a Docker que envíe la señal SIGQUIT cuando sea el momento de detener el contenedor. El ejemplo también usa los siguientes parámetros:

  • d – Ejecuta el contenedor en modo separado (en segundo plano). El modo separado no permitirá que el usuario interactúe inmediatamente con el contenedor, ya que el proceso se ejecuta en segundo plano.
  • t – asigna una consola Pseudo-TTY (PTY), que emula una consola de terminal real en el contenedor y evita que el contenedor de Ubuntu salga inmediatamente. El contenedor de Ubuntu del ejemplo requiere que una consola PTY permanezca activa en segundo plano.
  • “nombre de la imagen”:de qué imagen de Docker aprovisionar el contenedor, en este caso, ubuntu imagen.
docker run -d -t --stop-signal SIGQUIT ubuntu

También puede especificar la señal de parada mediante un Dockerfile, que le indica a Docker cómo crear un contenedor. Puede agregar una entrada al Dockerfile especificando la señal de parada con STOPSIGNAL SIGQUIT , por ejemplo. Puede cambiar el SIGQUIT con cualquier señal de alto que desee.

Salir de los contenedores inmediatamente con docker kill

Habrá momentos en los que querrá salir de los contenedores sin permitirles un período de gracia. El docker kill comando detiene inmediatamente un contenedor.

El siguiente ejemplo pasa el contenedor con ID 2aa318273db5 para docker kill . El contenedor saldrá inmediatamente a través de la señal SIGKILL. El contenedor no podrá salir airoso. Como resultado del comando, el contenedor se cerrará y se mostrará la ID del contenedor.

docker kill 2aa318273db5

Docker elimina todos los contenedores con el comando docker kill $(docker ps -q) . Observe que (docker ps -q ) es una subexpresión aquí.

Detener y eliminar un contenedor con docker rm

De forma predeterminada, cuando crea un contenedor, ese contenedor se crea igual que antes:es idempotente. La eliminación de un contenedor tendrá un impacto mínimo y, con eso en mente, docker rm puede forzar la detención y retirar un contenedor. Docker emite un SIGKILL envía una señal al proceso principal y elimina el contenedor de la lista de contenedores disponibles en su instalación de Docker.

Si el contenedor debe conservar los archivos internos modificados o debe conservarse su estado, la eliminación de un contenedor destruirá esos cambios. ¡Cuidado con los posibles errores!

En el siguiente ejemplo, quizás haya iniciado un contenedor al que se le asignó el nombre kind_galileo . Antes de retirar un contenedor, se debe detener el contenedor, como se muestra a continuación. El docker ps -a el comando muestra el estado de Exited para el contenedor de ejemplo.

Ahora que el contenedor dejó de emitir docker rm El comando eliminará el contenedor por completo.

docker rm kind_galileo

En lugar de detener el contenedor para luego eliminarlo, la combinación de --force y docker rm detendrá y retirará el contenedor en una sola operación. El contenedor, laughing_elion , ya no estará disponible para ejecutarse.

docker rm --force laughing_elion

Si no especifica el --force comando, encontrará el mensaje de error Error response from daemon: You cannot remove a running container...

Detención de contenedores Docker con Docker Compose

Los comandos de Docker generalmente se usan en un solo contenedor, pero puede crear un servicio con varios contenedores que funcionan en conjunto. La herramienta Docker Compose le permite configurar un servicio compuesto por varios contenedores para trabajar juntos.

Como los contenedores dentro de un servicio están diseñados para funcionar juntos, es mejor detener todo el servicio correctamente en lugar de cualquier contenedor individual.

Si tiene un servicio que se ejecuta con varios contenedores, [docker-compose stop] detiene el servicio sin retirar los contenedores ni el servicio. Siga a continuación para crear un servicio Docker Compose, iniciar el servicio y, en última instancia, detener el servicio correctamente.

1. Cree un directorio para almacenar su archivo de configuración. En este ejemplo, el directorio C:\Artículos\Ubuntu almacenará el archivo.

mkdir C:\Articles\Ubuntu

2. A continuación, cree el archivo docker-compose.yml archivo, que contiene la siguiente configuración. El siguiente archivo Docker Compose crea un servicio con dos contenedores de Ubuntu y, cuando se activan, los contenedores no se cierran inmediatamente.

# The specification version of docker-compose
version: "3.9"
# The collection of applications composing this service
services:
  # First Ubuntu Container
  container1:
    image: ubuntu
    # Same as the -t option and allocates a Psuedo-TTY, so the container does not immediately exit.
    tty: true
  # Second Ubuntu Container
  container2:
    image: ubuntu
    tty: true

3. En una sesión de terminal, vaya a su directorio de archivos de configuración de Docker personalizado, que en este ejemplo es C:\Articles\Ubuntu . Ejecute docker-compose up -d para generar e iniciar el servicio creado en el paso anterior en segundo plano como lo indica el -d opción.

4. En la misma sesión de terminal y directorio, emita el comando docker-compose stop para finalizar el servicio y los contenedores con gracia.

El docker-compose comando, como docker comando, también tiene el rm --force y kill parámetros docker-compose los parámetros funcionan en el servicio en lugar de un solo contenedor. El docker-compose kill el comando también toma una opción -s opción para especificar la señal de parada.

Conclusión

Los contenedores Docker son una herramienta poderosa para crear entornos únicos y segmentados para uso en desarrollo y producción. En este artículo, ha aprendido varias formas en que Docker detiene uno o más contenedores, incluso todos. También aprendiste sobre la señal de parada predeterminada que usa Docker y cómo cambiarla.

Con este conocimiento, ahora conoce los entresijos de detener contenedores Docker y cómo no equivocarse cuando es hora de dejar de ejecutar contenedores. ¿Cómo planea detener sus contenedores a partir de ahora, teniendo este nuevo conocimiento?


Docker
  1. ¿Qué es Docker? Aprenda a usar contenedores:explicado con ejemplos

  2. ¿Qué es Docker (y los contenedores de Linux?)

  3. Portainer:una interfaz gráfica de usuario fácil de usar para ejecutar y obtener contenedores docker

  4. Cómo usar imágenes, contenedores y archivos Docker en profundidad

  5. Cómo usar Docker Compose

Cómo usar las políticas de reinicio de Docker para mantener los contenedores en funcionamiento

Cómo usar Docker Cp para copiar archivos entre el host y los contenedores

Cómo eliminar contenedores Docker

Cómo detener los contenedores de Docker

Utilice Ngnix para utilizar contenedores Docker en Ubuntu

Cómo listar/iniciar/detener/eliminar contenedores docker