GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Usa i contenitori Docker Stop senza rovinare le cose!

Hai problemi con i contenitori di arresto Docker? Trovare il modo corretto per fermare un container è difficile grazie alla possibilità di creare molti container diversi. In questo articolo imparerai i comandi Docker per arrestare un contenitore o tutti i contenitori.

Continua a leggere per saperne di più!

Prerequisiti

Per seguire questo tutorial, assicurati di avere quanto segue:

  • Windows 10:il tutorial utilizza Windows per eseguire Docker, ma puoi anche applicare gli stessi passaggi generali a Linux o macOS.
  • Docker Desktop – Questo tutorial utilizza la versione 3.5.2. Il motore Docker è disponibile se sei su Linux poiché la GUI non lo è.
  • Uno o più contenitori Docker in esecuzione.

Termina Container con il comando Docker stop Container

Iniziamo con il primo comando:il docker stop container e come esegue l'arresto dei container.

Ad esempio, forse è necessario interrompere un container in esecuzione con il nome mystifying_hofstadter e un ID di fb66ed502096 . Come mostrato nell'esempio seguente, arresta il contenitore con docker stop comando contenitori.

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

Cosa succede se hai più container in esecuzione e desideri interromperli? Il docker stop Il comando containers supporta l'arresto di più ID container, uno alla volta.

Innanzitutto, elenca tutti i contenitori tramite la docker ps comando e passa gli ID del contenitore a docker stop comando container, come mostrato di seguito.

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

Che cosa succede se desideri interrompere tutti i contenitori in esecuzione senza recuperare manualmente gli ID contenitore e passarli a docker stop ? La docker ps -q il comando lo realizzerà. Il -q parametro di docker ps comando restituisce solo gli ID dei contenitori.

# 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)

Il $(docker ps -q) costrutto sopra è una sottoespressione sia in Bash su Linux che in PowerShell su Windows. Una sottoespressione indica alla shell di elaborare una serie di comandi, docker ps -q , prima e poi restituisci il set di risultati al comando originale docker stop .

Il docker stop Il comando containers utilizza il segnale SIGTERM. I segnali Linux informano un processo di un evento, ma spetta al processo decidere come agire su un dato segnale.

Quando si utilizza il segnale SIGTERM, Docker utilizza il segnale per interrompere con grazia un processo attendendo un 10 predefinito secondi prima di inviare il segnale SIGKILL, che interrompe immediatamente il processo.

Arresto di un container utilizzando i segnali di processo

Hai appreso del comportamento predefinito di Docker (segnale di arresto), con il docker stop comando container, quando si arresta un container. Ma potresti non volere il comportamento predefinito. Puoi invece indicare a Docker di utilizzare segnali di arresto alternativi.

Con la docker run comandi --stop-signal flag, è possibile specificare il segnale di arresto all'avvio del container. Questo flag imposta il segnale che verrà inviato al contenitore in esecuzione quando desideri che si interrompa.

Nell'esempio seguente, il --stop-signal flag assume il valore SIGQUIT , che dice a Docker di inviare il segnale SIGQUIT quando è il momento di fermare il container. L'esempio utilizza anche i seguenti parametri:

  • d – Esegue il contenitore in modalità scollegata (in background). La modalità separata non consentirà all'utente di interagire immediatamente con il contenitore poiché il processo è in esecuzione in background.
  • t – alloca una console Pseudo-TTY (PTY), che emula una vera console terminale nel container e impedisce al container Ubuntu di uscire immediatamente. Il contenitore Ubuntu nell'esempio richiede una console PTY per rimanere attiva in background.
  • "nome immagine" – Da quale immagine Docker eseguire il provisioning del contenitore, in questo caso, ubuntu immagine.
docker run -d -t --stop-signal SIGQUIT ubuntu

Puoi anche specificare il segnale di arresto utilizzando un Dockerfile, che indica a Docker come creare un container. Puoi aggiungere una voce al Dockerfile specificando il segnale di stop con STOPSIGNAL SIGQUIT , Per esempio. Puoi cambiare il SIGQUIT con qualsiasi segnale di stop desideri.

Uscita immediata dai container con docker kill

Ci saranno momenti in cui vorrai uscire dai contenitori senza concedere loro un periodo di grazia. La docker kill il comando arresta immediatamente un contenitore.

L'esempio seguente passa il contenitore con ID 2aa318273db5 a docker kill . Il container uscirà immediatamente tramite il segnale SIGKILL. Il contenitore non potrà avere un'uscita aggraziata. Come risultato del comando, il container uscirà e verrà mostrato l'ID del container.

docker kill 2aa318273db5

Docker elimina tutti i contenitori con il comando docker kill $(docker ps -q) . Nota che (docker ps -q ) è una sottoespressione qui.

Arresto e rimozione di un container con docker rm

Per impostazione predefinita, quando crei un contenitore, quel contenitore viene creato come prima:è idempotente. La rimozione di un contenitore avrà un impatto minimo e, tenendo presente ciò, docker rm può forzare l'arresto e rimuovere un contenitore. Docker emette un SIGKILL segnala al processo principale e rimuove il contenitore dall'elenco dei contenitori disponibili sull'installazione Docker.

Se il contenitore deve conservare i file interni modificati o il suo stato deve essere mantenuto, la rimozione di un contenitore distruggerà tali modifiche. Attenzione ai potenziali errori!

Nell'esempio seguente, forse hai avviato un contenitore a cui è stato assegnato il nome kind_galileo . Prima di rimuovere un contenitore, il contenitore deve essere fermato, come mostrato di seguito. La docker ps -a il comando sta visualizzando lo stato di Exited per il contenitore di esempio.

Ora che il contenitore ha smesso di emettere il docker rm il comando rimuoverà completamente il contenitore.

docker rm kind_galileo

Invece di fermare il contenitore per poi rimuoverlo, la combinazione di --force e docker rm si fermerà e rimuoverà il contenitore in un'unica operazione. Il contenitore, laughing_elion , non sarà più disponibile per l'esecuzione.

docker rm --force laughing_elion

Se non specifichi il --force comando, verrà visualizzato il messaggio di errore Error response from daemon: You cannot remove a running container...

Interruzione dei contenitori Docker con Docker Compose

I comandi Docker vengono in genere utilizzati su un singolo contenitore, ma puoi creare un servizio con più contenitori che funzionano insieme. Lo strumento Docker Compose ti consente di configurare un servizio composto da più contenitori per lavorare insieme.

Poiché i contenitori all'interno di un servizio sono progettati per funzionare insieme, è meglio interrompere l'intero servizio stesso in modo corretto anziché qualsiasi singolo contenitore.

Se hai un servizio in esecuzione con più contenitori, [docker-compose stop] interrompe il servizio senza rimuovere i contenitori o il servizio. Segui di seguito per creare un servizio Docker Compose, avviare il servizio e infine interrompere il servizio in modo regolare.

1. Creare una directory in cui memorizzare il file di configurazione. In questo esempio, la directory C:\Articoli\Ubuntu memorizzerà il file.

mkdir C:\Articles\Ubuntu

2. Quindi, crea il file docker-compose.yml file, contenente la seguente configurazione. Il file Docker Compose sottostante crea un servizio con due contenitori Ubuntu e, una volta aperti, i contenitori non escono immediatamente.

# 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. In una sessione del terminale, vai alla directory del file di configurazione Docker personalizzato, che in questo esempio è C:\Articoli\Ubuntu . Esegui docker-compose up -d per generare e avviare il servizio creato nel passaggio precedente in background come indicato dal -d opzione.

4. Nella stessa sessione del terminale e nella stessa directory, emettere il comando docker-compose stop per terminare il servizio e contenitori con grazia.

Il docker-compose comando, come la docker comando, ha anche il rm --force e kill parametri. La docker-compose i parametri funzionano sul servizio anziché su un singolo contenitore. La docker-compose kill il comando accetta anche un'opzione -s opzione per specificare il segnale di arresto.

Conclusione

I container Docker sono un potente strumento per creare ambienti unici e segmentati per lo sviluppo e l'uso in produzione. In questo articolo, hai appreso diversi modi in cui Docker interrompe uno o più, anche tutti, i contenitori. Hai anche imparato a conoscere il segnale di arresto predefinito utilizzato da Docker e come modificarlo.

Con questa conoscenza, ora conosci i dettagli dell'arresto dei container Docker e come non sbagliare quando è il momento di interrompere l'esecuzione dei container. Come pensi di fermare i tuoi container d'ora in poi, avendo questa nuova conoscenza?


Docker
  1. Portainer:una GUI facile da usare per eseguire e ottenere contenitori Docker

  2. Come usare Docker Compose

  3. Come collegare i contenitori Docker

  4. Come utilizzare il comando Ispeziona Docker

  5. Usa perf all'interno di un contenitore docker senza --privileged

Come utilizzare i criteri di riavvio di Docker per mantenere in esecuzione i contenitori

Come utilizzare Docker Cp per copiare file tra host e contenitori

Come rimuovere i contenitori Docker

Come fermare i container Docker

Usa Ngnix per proxy Docker Containers su Ubuntu

Come elencare/avviare/arrestare/eliminare i contenitori docker