Ansible

Come fermare tutti i container Docker usando Ansible

Come fermare tutti i container Docker usando Ansible
Ansible ha molti moduli per automatizzare il tuo host Docker, contenitori, volumi, reti, ecc. Se vuoi interrompere l'esecuzione dei container Docker, puoi farlo anche tu.

In questo articolo, ti mostrerò come fermare uno specifico container Docker. Ti mostrerò anche come interrompere tutti i contenitori Docker in esecuzione o tutti i contenitori Docker che eseguono un'immagine Docker specifica utilizzando Ansible. Quindi iniziamo.

Prerequisiti:

Se vuoi provare gli esempi di questo articolo,

1) Devi avere Ansible installato sul tuo computer.
2) Devi avere Docker installato sul tuo computer o su un host Ubuntu remoto.
3) Devi avere la libreria Python Docker installata sul tuo host Docker.
4) È necessario configurare l'host Docker per l'automazione Ansible.

NOTA: Host di Docker è il computer su cui hai installato Docker.

Ci sono molti articoli su LinuxHint dedicati all'installazione di Ansible e alla configurazione degli host per l'automazione di Ansible e all'installazione di Docker. Puoi controllarli se necessario.

Creazione di una directory di progetto:

Per mantenere organizzati tutti i file e le directory che creeremo in questo articolo, è una buona idea creare una directory di progetto.

Per creare una directory di progetto docker1/ nella directory di lavoro corrente, esegui il seguente comando:

$ mkdir -pv docker1/playbook

Ora vai a docker1/ directory del progetto come segue:

$ cd docker1/

Configurazione di Ansible per l'automazione dell'host Docker remoto:

Se hai installato Docker su un host Ubuntu remoto che desideri automatizzare utilizzando Ansible, questa sezione fa per te.

Innanzitutto, crea un file di inventario Ansible padroni di casa con il seguente comando:

$ nano host

Ora aggiungi l'indirizzo IP o il nome DNS del tuo host Docker nel padroni di casa file di inventario come segue.

[portale]
vm4.nodokite.come

Nel mio caso, il nome DNS del mio host Ubuntu Docker è vm4.nodokite.come. Sarà diverso per te. Quindi, assicurati di sostituirlo se necessario.

Quando hai finito, premi + X seguito da e per salvare il padroni di casa file.

Ora crea un file di configurazione Ansible ansible.cfg come segue:

$ nano ansible.cfg

Ora, digita le seguenti righe nel ansible.cfg file di configurazione.

[portale]
vm4.nodokite.come

Quando hai finito, premi + X seguito da e per salvare il ansible.cfg file.

Ora, controlla se puoi eseguire il ping dell'host Docker remoto dal tuo computer con il seguente comando:

$ ansible all -u ansible -m ping

Come puoi vedere, posso eseguire il ping del mio host Docker remoto.

Come puoi vedere, ho Docker 19.03.11 installato sul mio host Ubuntu Docker remoto.

Ora, devi avere la libreria Python Docker installata sul tuo host Docker remoto affinché i moduli docker Ansible funzionino. In questo articolo, sto usando Ubuntu. Quindi, questo è ciò che tratterò.

Per installare la libreria Python Docker sul tuo host Docker remoto (Ubuntu), crea un nuovo playbook Ansible install_docker_python_lib.igname nel libri di gioco/ directory come segue:

$ nano playbooks/install_docker_python_lib.igname

Ora, digita le seguenti righe nel install_docker_python_lib.igname file.

- host: docker
utente: ansible
diventa vero
compiti:
- nome: assicurati che il pacchetto python3-docker sia installato
adatto:
nome: python3-docker
stato: presente
update_cache: Vero

Quando hai finito, premi + X seguito da e per salvare il install_docker_python_lib.igname file.

Ora, esegui il install_docker_python_lib.igname playbook come segue:

$ ansible-playbook playbooks/install_docker_python_lib.igname

Il playbook dovrebbe essere eseguito correttamente e installerà la libreria Python Docker sul tuo host Docker remoto.

Configurazione di Ansible per l'automazione dell'host Docker locale:

Se hai installato Docker sull'host in cui hai installato Ansible e desideri automatizzarlo utilizzando Ansible, questa sezione fa per te.

Innanzitutto, crea un nuovo playbook Ansible A install_docker_python_lib.igname nel libri di gioco/ directory come segue:

$ nano playbooks/install_docker_python_lib.igname

Ora, digita le seguenti righe nel install_docker_python_lib.igname file.

- host: localhost
connessione: locale
utente: shovon
diventa vero
compiti:
- nome: assicurati che il pacchetto python3-docker sia installato
adatto:
nome: python3-docker
stato: presente
update_cache: Vero

Ecco, la linea utente: shovon imposta shovon come l'utente che eseguirà le attività. Sarà diverso per te. Quindi, assicurati di cambiarlo con il tuo nome utente di accesso.

Puoi trovare il nome utente di accesso del tuo host Docker con il seguente comando:

$ whoami

Quando hai finito, premi + X seguito da e per salvare il install_docker_python_lib.igname file.

Ora, esegui il install_docker_python_lib.igname playbook come segue:

$ ansible-playbook --ask-pass --ask-become-pass
playbooks/install_docker_python_lib.igname

Ansible ti chiederà la password di accesso dell'utente che hai specificato nel playbook. Digita la password di accesso e premi .

Ansible ti chiederà anche la password BECOME/sudo. Dovrebbe essere la stessa password della password di accesso. Quindi, lascialo vuoto e premi .

Il playbook dovrebbe iniziare a funzionare. Potrebbe volerci un po' di tempo per completare.

A questo punto, il playbook dovrebbe avere successo e la libreria Python Docker dovrebbe essere installata.

Apportare le modifiche necessarie ai playbook:

A seconda che tu stia gestendo i container Docker sul tuo host Docker locale o su un host Docker remoto, devi adattare i tuoi playbook di conseguenza.

Dalle prossime sezioni di questo articolo, eseguirò i playbook di esempio su un host Docker remoto. Quindi, tutti i playbook inizieranno con le seguenti righe:

- host: docker
utente: ansible
compiti:

Se desideri eseguire i playbook sul tuo host Docker locale, assicurati che i playbook inizino invece con le seguenti righe.

- host: localhost
connessione: locale
utente: shovon
diventa vero
compiti:

Quindi, sostituire con le attività che vuoi eseguire e salva il playbook premendo by + X seguito da e .

Devi anche eseguire i playbook di Ansible in modo leggermente diverso se hai intenzione di gestire un host Docker localmente utilizzando Ansible.

Puoi eseguire un playbook Ansible localmente come segue:

$ ansible-playbook --ask-pass --ask-become-pass

Assicurati di cambiare al percorso del tuo file YAML del playbook di Ansible.

Arresto di un container Docker:

Se disponi di un container Docker in esecuzione e conosci l'ID o il nome del container Docker, puoi facilmente arrestare quel container Docker utilizzando Ansible.

In questa sezione, ti mostrerò come farlo.

Per prima cosa, creerò un Nginx (nome immagine) Contenitore Docker http_server1 (nome del contenitore) come segue:

$ docker run -p 8080:80 -d --name http_server1 nginx

Come puoi vedere, il contenitore Docker http_server1 sta correndo.

$ docker ps

Per fermare il container Docker http_server1 usando Ansible, crea un nuovo playbook stop_contenitore.igname nel libri di gioco/ directory come segue:

$ nano playbook/stop_container.igname

Quindi, digita le seguenti righe nel stop_contenitore.igname playbook.

- host: docker
utente: ansible
compiti:
- nome: Arresta il contenitore http_server1
docker_container:
nome: http_server1
stato: fermo

Quando hai finito, premi + X seguito da e per salvare il stop_contenitore.igname file.

Ecco, l'Ansible docker_container il modulo viene utilizzato per fermare il contenitore Docker http_server1.

Ora, esegui il stop_contenitore.igname playbook con il seguente comando:

$ playbook ansible-playbook/stop_container.igname

Come puoi vedere, il contenitore Docker http_server1 non è più in esecuzione sul mio host Docker remoto.

$ docker ps

Puoi elencare tutti i contenitori Docker (in esecuzione, in pausa, arrestati) con il seguente comando:

$ docker ps --all

Come puoi vedere, il container Docker fermo http_server1 È elencato.

Arresto di tutti i contenitori Docker in esecuzione:

Se vuoi interrompere tutti i container Docker in esecuzione sul tuo host Docker utilizzando Ansible, questa sezione fa per te.

Innanzitutto, creerò 3 contenitori Docker (server1, server2, e server3) in modo da poterli interrompere tutti utilizzando Ansible in seguito.

Per creare il server1 Contenitore Docker, eseguire il comando seguente:

$ docker run -p 8081:80 -d --name server1 nginx

Per creare il server2 Contenitore Docker, eseguire il comando seguente:

$ docker run -p 8082:80 -d --name server2 nginx

Per creare il server3 Contenitore Docker, eseguire il comando seguente:

$ docker run -p 8083:80 -d --name server3 nginx

Come puoi vedere, il server1, server2, e server3 I contenitori Docker sono in esecuzione sul mio host Docker remoto.

$ docker ps

Per fermare tutti quei contenitori Docker, crea un nuovo playbook stop_all_container.igname nel tuo libri di gioco/ directory come segue:

$ nano playbook/stop_all_container.igname

Ora, digita le seguenti righe nel stop_all_container.igname file playbook.

- host: docker
utente: ansible
compiti:
- nome: Ottieni un elenco di tutti i contenitori in esecuzione
docker_host_info:
contenitori: Vero
registrati: docker_info
- nome: Arresta tutti i contenitori in esecuzione
docker_container:
nome: ' articolo.Nomi[0] | regex_replace("^/", "") '
stato: fermo
ciclo: 'docker_info.contenitori '

Per salvare il stop_all_container.igname file, premere + X seguito da e .

Qui ho definito 2 compiti.

Il primo compito utilizza l'Ansible docker_host_info modulo per ottenere un elenco di tutti i contenitori Docker in esecuzione e memorizzarlo nel docker_info variabile.

La seconda attività scorre attraverso il docker_info.contenitori array trova i nomi dei contenitori Docker in esecuzione e li ferma uno per uno.

Ora, esegui il stop_all_container.igname playbook con il seguente comando:

$ playbook ansible-playbook/stop_all_container.igname

Il playbook dovrebbe funzionare correttamente come puoi vedere nello screenshot qui sotto.

Come puoi vedere, non ci sono contenitori Docker in esecuzione sul mio host Docker remoto.

$ docker ps

Puoi elencare tutti i contenitori Docker (in esecuzione, in pausa, arrestati) con il seguente comando:

$ docker ps --all

Come puoi vedere, i container Docker fermati server1, server2, e server3 sono elencati.

Arresta tutti i contenitori Docker che eseguono un'immagine specifica:

Se vuoi interrompere tutti i contenitori Docker che eseguono un'immagine Docker specifica, questa sezione fa per te.

Per prima cosa, creiamo dei contenitori Docker fittizi.

Creerò 2 contenitori Docker (nginx1 e nginx2) usando il Nginx Immagine Docker e 2 contenitori Docker (http1 e http2) usando il httpd Immagine Docker per la dimostrazione.

Per creare il nginx1 Contenitore Docker utilizzando il Nginx Immagine Docker, esegui il seguente comando:

$ docker run -d -p 8081:80 --name nginx1 nginx

Per creare il nginx2 Contenitore Docker utilizzando il Nginx Immagine Docker, esegui il seguente comando:

$ docker run -d -p 8082:80 --name nginx2 nginx

Per creare il http1 Contenitore Docker utilizzando il httpd Immagine Docker, esegui il seguente comando:

$ docker run -d -p 8091:80 --name http1 httpd

Per creare il http2 Contenitore Docker utilizzando il httpd Immagine Docker, esegui il seguente comando:

$ docker run -d -p 8092:80 --name http2 httpd

Come puoi vedere, il nginx1, nginx2, http1, e http2 I contenitori Docker sono in esecuzione sul mio host Docker remoto.

Per fermare tutti i contenitori Docker che eseguono un'immagine Docker specifica (diciamo, nginx), crea un nuovo playbook Docker stop_all_image_containers.igname nel libri di gioco/ directory come segue:

$ nano playbook/stop_all_image_containers.igname

Ora, digita le seguenti righe nel stop_all_image_containers.igname file.

- host: docker
utente: ansible
compiti:
- nome: Ottieni un elenco di tutti i contenitori in esecuzione
docker_host_info:
contenitori: Vero
registrati: docker_info
- nome: Arresta tutti i contenitori che eseguono nginx image
docker_container:
nome: ' articolo.Nomi[0] | regex_replace("^/", "") '
stato: fermo
quando: oggetto.Immagine == 'nginx'
ciclo: 'docker_info.contenitori '

Quando hai finito, premi + X seguito da e per salvare il stop_all_image_containers.igname file.

Qui ho aggiunto 2 attività.

Il primo compito utilizza l'Ansible docker_host_info modulo per ottenere un elenco di tutti i contenitori Docker in esecuzione e memorizzarlo nel docker_info variabile.

La seconda attività scorre attraverso il docker_info.contenitori array trova i nomi dei contenitori Docker in esecuzione ed esegue il and docker_container modulo per ogni contenitore in esecuzione solo se il nome dell'immagine del contenitore è Nginx. Quindi, ferma i contenitori Docker abbinati.

Nella seconda attività, la riga seguente viene utilizzata per verificare se il contenitore Docker sta eseguendo il Nginx Immagine. Se lo desideri, puoi cambiarlo con un nome di immagine Docker diverso.

Ora, esegui il stop_all_image_containers.igname playbook come segue:

$ playbook ansible-playbook/stop_all_image_containers.igname

Come puoi vedere, solo il Nginx contenitori (nginx1 e nginx2) sono modificati (fermati). Il httpd contenitori (http1 e http2) sono saltati.

Come puoi vedere, no Nginx I contenitori Docker sono in esecuzione sul mio host Docker remoto. Solo il httpd contenitori Docker (http1 e http2) è in esecuzione.

$ docker ps

Puoi elencare tutti i contenitori Docker (in esecuzione, in pausa, arrestati) con il seguente comando:

$ docker ps --all

Come puoi vedere, i container Docker fermati nginx1 e nginx2 sono elencati.

Conclusione:

In questo articolo, ti ho mostrato come arrestare un container Docker in esecuzione, tutti i container Docker che eseguono un'immagine Docker specifica e tutti i container Docker in esecuzione del tuo host Docker. Per farlo, ho usato l'Ansible docker_container e docker_host_info moduli in questo articolo.

Per saperne di più su questi moduli, visita le seguenti pagine della documentazione ufficiale di Ansible.

[1] docker_container - Gestisci i contenitori docker
[2] docker_host_info - Recupera informazioni sull'host docker e liste di oggetti dei servizi

Come aumentare gli FPS in Linux?
FPS sta per Fotogrammi al secondo. Il compito dell'FPS è misurare il frame rate nelle riproduzioni video o nelle prestazioni di gioco game. In parole ...
I migliori giochi di laboratorio dell'app Oculus
Se possiedi un visore Oculus, devi essere informato sul sideloading. Il sideloading è il processo di installazione di contenuti non archiviati sul vis...
I 10 migliori giochi da giocare su Ubuntu
La piattaforma Windows è stata una delle piattaforme dominanti per i giochi a causa dell'enorme percentuale di giochi che si stanno sviluppando oggi p...