Come fermare tutti i contenitori Docker usando Ansible

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

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

Prerequisiti:

Se vuoi provare gli esempi di questo articolo,

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

NOTA: Docker Host è il computer in cui hai installato Docker.

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

Creazione di una directory di progetto:

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

Per creare una directory di progetto Docker1/ Nella tua attuale directory di lavoro, esegui il seguente comando:

$ mkdir -pv docker1/playbooks

Ora, naviga su Docker1/ Directory del progetto come segue:

$ CD Docker1/

Configurazione di Ansible per automazione dell'host Docker remota:

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

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

$ nano hosts

Ora aggiungi l'indirizzo IP o il nome DNS del tuo host Docker in ospiti ' File di inventario come segue.

[Docker]
VM4.nodekite.com

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

Una volta che hai finito, premere+ X seguito da Y E per salvare il ospiti file.

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

$ nano ansible.cfg

Ora, digita le seguenti righe in Ansible.cfg file di configurazione.

[Docker]
VM4.nodekite.com

Una volta che hai finito, premere+ X seguito da Y E per salvare il Ansible.cfg file.

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

$ ansible tutto -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 telecomando Ubuntu Docker Host.

Ora, devi avere la biblioteca Python Docker installata sul tuo host Docker remoto per Ansible Docker Moduli per funzionare. In questo articolo, sto usando Ubuntu. Quindi, questo è ciò che coprirò.

Per installare Python Docker Library sul tuo telecomando Docker Host (Ubuntu), crea un nuovo playbook Ansible Install_docker_python_lib.Yaml nel playbooks/ directory come segue:

$ nano playbooks/install_docker_python_lib.Yaml

Ora, digita le seguenti righe in Install_docker_python_lib.Yaml file.

- Host: Docker
Utente: Ansible
diventa vero
compiti:
- Nome: assicurati che sia installato il pacchetto Python3-Docker
Apt:
Nome: Python3-Docker
Stato: presente
update_cache: vero

Una volta che hai finito, premere+ X seguito da Y E per salvare il Install_docker_python_lib.Yaml file.

Ora, esegui il Install_docker_python_lib.Yaml Playbook come segue:

$ ansible-playbook playbooks/install_docker_python_lib.Yaml

Il playbook dovrebbe essere eseguito correttamente e installerà la biblioteca 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 si desidera automatizzarlo usando Ansible, questa sezione fa per te.

Innanzitutto, crea un nuovo playbook Ansible Install_docker_python_lib.Yaml nel playbooks/ directory come segue:

$ nano playbooks/install_docker_python_lib.Yaml

Ora, digita le seguenti righe in Install_docker_python_lib.Yaml file.

- Host: localhost
Connessione: locale
Utente: Shovon
diventa vero
compiti:
- Nome: assicurati che sia installato il pacchetto Python3-Docker
Apt:
Nome: Python3-Docker
Stato: presente
update_cache: vero

Qui, la linea Utente: Shovon imposta Shovon come l'utente che eseguirà le attività. Sarà diverso per te. Quindi, assicurati di cambiarlo nel tuo nome utente di accesso.

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

$ whoami

Una volta che hai finito, premere+ X seguito da Y E per salvare il Install_docker_python_lib.Yaml file.

Ora, esegui il Install_docker_python_lib.Yaml Playbook come segue:

$ ansible-playbook--pass-pass--by-pass-pass
PlayBooks/Install_Docker_Python_Lib.Yaml

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

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

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

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

Affermare la necessità di adattamento ai playbook:

A seconda che tu stia gestendo i container Docker sul tuo host Docker locale o un host Docker remoto, devi regolare 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 vuoi 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 desideri eseguire e salvare il playbook premendo + X seguito da Y E .

Devi anche eseguire i playbook Ansible in modo leggermente diverso se hai intenzione di gestire un host Docker a livello locale.

Puoi eseguire un playbook Ansible localmente come segue:

$ ansible-playbook--pass-pass--by-pass-pass

Assicurati di cambiare sul percorso del tuo file Yaml Ansible Playbook.

Fermare un contenitore Docker:

Se hai un contenitore Docker in esecuzione e conosci l'ID o il nome del contenitore Docker, puoi facilmente fermare quel contenitore Docker usando Ansible.

In questa sezione, ti mostrerò come farlo.

Innanzitutto, 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 è in esecuzione.

$ Docker PS

Per fermare il contenitore Docker http_server1 Usando Ansible, crea un nuovo playbook stop_container.Yaml nel playbooks/ directory come segue:

$ nano playbooks/stop_container.Yaml

Quindi, digita le seguenti righe in stop_container.Yaml playbook.

- Host: Docker
Utente: Ansible
compiti:
- Nome: arrestare il contenitore HTTP_SERVER1
docker_container:
Nome: http_server1
Stato: fermato

Una volta che hai finito, premere + X seguito da Y E per salvare il stop_container.Yaml file.

Qui, l'ansible docker_container Il modulo viene utilizzato per fermare il contenitore Docker http_server1.

Ora, esegui il stop_container.Yaml playbook con il seguente comando:

$ ansible-playbook playbooks/stop_container.Yaml

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

$ Docker PS

È possibile elencare tutti i contenitori Docker (in esecuzione, in pausa, fermati) con il seguente comando:

$ Docker PS -All

Come puoi vedere, il contenitore Docker interrotto http_server1 È elencato.

Fermare tutti i contenitori Docker:

Se vuoi fermare tutti i contenitori Docker in esecuzione sull'host Docker usando Ansible, allora questa sezione fa per te.

Innanzitutto, creerò 3 contenitori Docker (Server1, server2, E Server3) in modo che io possa fermarli tutti usando Ansible più tardi.

Per creare il Server1 Container Docker, eseguire il seguente comando:

$ Docker run -p 8081: 80 -D --Name Server1 Nginx

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

$ Docker run -p 8082: 80 -D --Name Server2 Nginx

Per creare il Server3 Container Docker, eseguire il seguente comando:

$ Docker run -p 8083: 80 -D --Name Server3 Nginx

Come puoi vedere, il Server1, server2, E Server3 I container Docker sono in esecuzione sul mio host Docker remoto.

$ Docker PS

Per fermare tutti quei contenitori Docker, crea un nuovo playbook stop_all_container.Yaml nel tuo playbooks/ directory come segue:

$ nano playbooks/stop_all_container.Yaml

Ora, digita le seguenti righe in stop_all_container.Yaml File di playbook.

- Host: Docker
Utente: Ansible
compiti:
- Nome: ottieni un elenco di tutti i contenitori in esecuzione
docker_host_info:
Contenitori: vero
Registro: docker_info
- Nome: fermare tutti i contenitori in esecuzione
docker_container:
nome: 'item.Nomi [0] | regex_replace ("^/", "") '
Stato: fermato
Loop: 'Dockker_info.Container '

Per salvare il stop_all_container.Yaml File, premere + X seguito da Y E .

Qui, ho definito 2 compiti.

La prima attività utilizza l'ansible docker_host_info Modulo per ottenere un elenco di tutti i contenitori Docker in esecuzione e lo memorizza nel docker_info variabile.

Il secondo compito attraversa il docker_info.contenitori L'array trova i nomi dei container Docker in esecuzione e li ferma uno per uno.

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

$ ansible-playbook playbooks/stop_all_container.Yaml

Il playbook dovrebbe essere eseguito con successo come puoi vedere nello screenshot qui sotto.

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

$ Docker PS

È possibile elencare tutti i contenitori Docker (in esecuzione, in pausa, fermati) con il seguente comando:

$ Docker PS -All

Come puoi vedere, i contenitori Docker fermati Server1, server2, e server3 sono elencati.

Fermare tutti i contenitori Docker in esecuzione un'immagine specifica:

Se si desidera fermare tutti i contenitori Docker che eseguono un'immagine Docker specifica, questa sezione fa per te.

Innanzitutto, creiamo alcuni contenitori Dummy Docker.

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 usando il file Nginx Immagine Docker, eseguire il seguente comando:

$ Docker run -d -p 8081: 80 --Name nginx1 nginx

Per creare il nginx2 Contenitore Docker usando il file Nginx Immagine Docker, eseguire il seguente comando:

$ Docker run -d -p 8082: 80 --Name nginx2 nginx

Per creare il http1 Contenitore Docker usando il file httpd Immagine Docker, eseguire il seguente comando:

$ Docker run -d -p 8091: 80 --Name http1 httpd

Per creare il http2 Contenitore Docker usando il file httpd Immagine Docker, eseguire il seguente comando:

$ Docker run -d -p 8092: 80 -NAME HTTP2 HTTPD

Come puoi vedere, il nginx1, nginx2, http1, E http2 I container 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 Docker Playbook stop_all_image_container.Yaml nel playbooks/ directory come segue:

$ nano playbooks/stop_all_image_container.Yaml

Ora, digita le seguenti righe in stop_all_image_container.Yaml file.

- Host: Docker
Utente: Ansible
compiti:
- Nome: ottieni un elenco di tutti i contenitori in esecuzione
docker_host_info:
Contenitori: vero
Registro: docker_info
- Nome: arrestare tutti i contenitori che eseguono l'immagine NGINX
docker_container:
nome: 'item.Nomi [0] | regex_replace ("^/", "") '
Stato: fermato
Quando: articolo.Immagine == 'nginx'
Loop: 'Dockker_info.Container '

Una volta che hai finito, premere + X seguito da Y E per salvare il stop_all_image_container.Yaml file.

Qui, ho aggiunto 2 attività.

La prima attività utilizza l'ansible docker_host_info Modulo per ottenere un elenco di tutti i contenitori Docker in esecuzione e lo memorizza nel docker_info variabile.

Il secondo compito attraversa il docker_info.contenitori L'array trova i nomi dei container Docker in esecuzione ed esegue il 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 esegue il Nginx Immagine. Puoi cambiarlo in un altro nome di immagine Docker se lo desideri.

Ora, esegui il stop_all_image_container.Yaml Playbook come segue:

$ ansible-playbook playbooks/stop_all_image_container.Yaml

Come puoi vedere, solo il Nginx contenitori (nginx1 E nginx2) sono modificati (fermato). IL httpd contenitori (http1 E http2) vengono saltati.

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

$ Docker PS

È possibile elencare tutti i contenitori Docker (in esecuzione, in pausa, fermati) con il seguente comando:

$ Docker PS -All

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

Conclusione:

In questo articolo, ti ho mostrato come fermare un contenitore Docker in esecuzione, tutti i contenitori Docker che eseguono un'immagine Docker specifica e tutti i contenitori 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, visitare le seguenti pagine di documentazione ufficiale di Ansible.

[1] Dockker_Container - Gestisci contenitori Docker
[2] Docker_host_info - recupera i fatti sull'host Docker e gli elenchi di oggetti dei servizi