Ansible

Hoe u alle Docker-containers kunt stoppen met Ansible

Hoe u alle Docker-containers kunt stoppen met Ansible
Ansible heeft veel modules voor het automatiseren van uw Docker-host, containers, volumes, netwerken, enz. Als u uw actieve Docker-containers wilt stoppen, kunt u dat ook doen.

In dit artikel laat ik je zien hoe je een specifieke Docker-container kunt stoppen. Ik ga je ook laten zien hoe je alle actieve Docker-containers kunt stoppen, of alle Docker-containers met een specifiek Docker-image met Ansible. Dus laten we beginnen.

Vereisten:

Als je de voorbeelden van dit artikel wilt uitproberen,

1) Je moet Ansible op je computer hebben geïnstalleerd.
2) Docker moet op uw computer of een externe Ubuntu-host zijn geïnstalleerd.
3) U moet de Python Docker-bibliotheek op uw Docker-host hebben geïnstalleerd.
4) U moet de Docker-host configureren voor Ansible-automatisering.

OPMERKING: Docker-host is de computer waarop Docker is geïnstalleerd.

Er zijn veel artikelen over LinuxHint gewijd aan het installeren van Ansible en het configureren van hosts voor Ansible-automatisering en het installeren van Docker. Je kunt ze bekijken als dat nodig is.

Een projectmap maken:

Om alle bestanden en directory die we in dit artikel gaan maken overzichtelijk te houden, is het een goed idee om een ​​projectdirectory te maken.

Een projectmap maken: havenarbeider1/ voer in uw huidige werkmap de volgende opdracht uit:

$ mkdir -pv docker1/playbooks

Navigeer nu naar de havenarbeider1/ projectmap als volgt:

$ cd-docker1/

Ansible configureren voor Remote Docker Host-automatisering:

Als je Docker hebt geïnstalleerd op een externe Ubuntu-host die je wilt automatiseren met Ansible, dan is deze sectie iets voor jou.

Maak eerst een Ansible-inventarisbestand gastheren met het volgende commando:

$ nano-hosts

Voeg nu het IP-adres of de DNS-naam van uw Docker-host toe in de gastheren' inventarisbestand als volgt:.

[dokter]
vm4.nodekite.com

In mijn geval is de DNS-naam van mijn Ubuntu Docker-host: vm4.nodekite.com. Het zal voor jou anders zijn. Zorg er dus voor dat u deze indien nodig vervangt.

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden gastheren het dossier.

Maak nu een Ansible-configuratiebestand weerbaar.cfg als volgt:

$ nano mogelijk.cfg

Typ nu de volgende regels in de weerbaar.cfg configuratiebestand.

[dokter]
vm4.nodekite.com

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden weerbaar.cfg het dossier.

Controleer nu of u de externe Docker-host vanaf uw computer kunt pingen met de volgende opdracht:

$ ansible all -u ansible -m ping

Zoals je kunt zien, kan ik mijn externe Docker-host pingen.

Zoals je kunt zien, heb ik Docker 19.03.11 geïnstalleerd op mijn externe Ubuntu Docker-host.

Nu moet u de Python Docker-bibliotheek op uw externe Docker-host hebben geïnstalleerd om Ansible docker-modules te laten werken. In dit artikel gebruik ik Ubuntu. Dus dit is wat ik zal behandelen.

Om de Python Docker-bibliotheek op uw externe Docker-host (Ubuntu) te installeren, maakt u een nieuw Ansible-playbook install_docker_python_lib.yaml in de draaiboeken/ map als volgt:

$ nano playbooks/install_docker_python_lib.yaml

Typ nu de volgende regels in de install_docker_python_lib.yaml het dossier.

- hosts: docker
gebruiker: ansible
worden: True
taken:
- naam: Zorg ervoor dat het python3-docker-pakket is geïnstalleerd
geschikt:
naam: python3-docker
staat: aanwezig
update_cache: True

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden install_docker_python_lib.yaml het dossier.

Voer nu de install_docker_python_lib.yaml draaiboek als volgt:

$ ansible-playbook playbooks/install_docker_python_lib.yaml

Het playbook zou met succes moeten worden uitgevoerd en het zal de Python Docker-bibliotheek op uw externe Docker-host installeren.

Ansible configureren voor lokale Docker-hostautomatisering:

Als je Docker hebt geïnstalleerd op de host waarop je Ansible hebt geïnstalleerd en je wilt dit automatiseren met Ansible, dan is deze sectie iets voor jou.

Maak eerst een nieuw Ansible-playbook install_docker_python_lib.yaml in de draaiboeken/ map als volgt:

$ nano playbooks/install_docker_python_lib.yaml

Typ nu de volgende regels in de install_docker_python_lib.yaml het dossier.

- hosts: localhost
verbinding: lokaal
gebruiker: shovon
worden: True
taken:
- naam: Zorg ervoor dat het python3-docker-pakket is geïnstalleerd
geschikt:
naam: python3-docker
staat: aanwezig
update_cache: True

Hier, de lijn gebruiker: shovon sets sjovon als de gebruiker die de taken gaat uitvoeren. Het zal voor jou anders zijn. Zorg er dus voor dat u deze wijzigt in uw login-gebruikersnaam.

U kunt de login-gebruikersnaam van uw Docker-host vinden met de volgende opdracht:

$ whoami

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden install_docker_python_lib.yaml het dossier.

Voer nu de install_docker_python_lib.yaml draaiboek als volgt:

$ ansible-playbook --ask-pass --ask-word-pass
playbooks/install_docker_python_lib.yaml

Ansible zal je om het inlogwachtwoord vragen van de gebruiker die je hebt opgegeven in het playbook. Typ het inlogwachtwoord en druk op .

Ansible zal u ook om het BECOME/sudo-wachtwoord vragen. Het moet hetzelfde wachtwoord zijn als uw inlogwachtwoord. Dus, laat het leeg en druk op .

Het draaiboek zou moeten beginnen te lopen. Het kan even duren om te voltooien.

Op dit punt zou het playbook succesvol moeten zijn en zou de Python Docker-bibliotheek moeten zijn geïnstalleerd.

Noodzakelijke aanpassingen aan Playbooks:

Afhankelijk van of u Docker-containers op uw lokale Docker-host of een externe Docker-host beheert, moet u uw playbooks dienovereenkomstig aanpassen.

In de volgende secties van dit artikel zal ik de voorbeeld-playbooks uitvoeren op een externe Docker-host. Dus alle playbooks beginnen met de volgende regels:

- hosts: docker
gebruiker: ansible
taken:

Als u de playbooks op uw lokale Docker-host wilt uitvoeren, zorg er dan voor dat de playbooks in plaats daarvan met de volgende regels beginnen.

- hosts: localhost
verbinding: lokaal
gebruiker: shovon
worden: True
taken:

Vervang dan met de taken die u wilt uitvoeren en sla het draaiboek op door op . te drukken + X gevolgd door Y en .

Je moet de Ansible-playbooks ook een beetje anders uitvoeren als je een Docker-host lokaal gaat beheren met Ansible.

U kunt als volgt lokaal een Ansible-playbook uitvoeren:

$ ansible-playbook --ask-pass --ask-word-pass

Zorg ervoor dat je verandert naar het pad van uw Ansible playbook YAML-bestand.

Een Docker-container stoppen:

Als u een actieve Docker-container hebt en u de ID of naam van de Docker-container kent, kunt u die Docker-container eenvoudig stoppen met Ansible.

In deze sectie ga ik je laten zien hoe je dat doet.

Eerst ga ik een maken Nginx (naam afbeelding) Docker-container http_server1 (containernaam) als volgt:

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

Zoals je kunt zien, is de Docker-container http_server1 is aan het rennen.

$ docker ps

De Docker-container stoppen http_server1 maak met Ansible een nieuw playbook stop_container.yaml in de draaiboeken/ map als volgt:

$ nano playbooks/stop_container.yaml

Typ vervolgens de volgende regels in de stop_container.yaml Speelboek.

- hosts: docker
gebruiker: ansible
taken:
- naam: Stop de http_server1 container
docker_container:
naam: http_server1
staat: gestopt

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden stop_container.yaml het dossier.

Hier, de Ansible docker_container module wordt gebruikt om de Docker-container te stoppen http_server1.

Voer nu de stop_container.yaml playbook met het volgende commando:

$ ansible-playbook playbooks/stop_container.yaml

Zoals je kunt zien, is de Docker-container http_server1 draait niet meer op mijn externe Docker-host.

$ docker ps

U kunt een lijst maken van alle Docker-containers (actief, gepauzeerd, gestopt) met de volgende opdracht:

$ docker ps --all

Zoals je kunt zien, is de gestopte Docker-container http_server1 wordt vermeld.

Alle actieve Docker-containers stoppen:

Als u wilt voorkomen dat alle Docker-containers op uw Docker-host worden uitgevoerd met Ansible, dan is deze sectie iets voor u.

Eerst ga ik 3 Docker-containers maken (server1, server2, en server3) zodat ik ze later allemaal kan stoppen met het gebruik van Ansible.

Om de . te maken server1 Docker-container, voer de volgende opdracht uit:

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

Om de . te maken server2 Docker-container, voer de volgende opdracht uit:

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

Om de . te maken server3 Docker-container, voer de volgende opdracht uit:

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

Zoals je kunt zien, is de server1, server2, en server3 Docker-containers worden uitgevoerd op mijn externe Docker-host.

$ docker ps

Maak een nieuw playbook om al die Docker-containers te stoppen stop_all_container.yaml in uw draaiboeken/ map als volgt:

$ nano playbooks/stop_all_container.yaml

Typ nu de volgende regels in de stop_all_container.yaml playbook-bestand.

- hosts: docker
gebruiker: ansible
taken:
- naam: Krijg een lijst van alle actieve containers
docker_host_info:
containers: True
registreren: docker_info
- naam: Stop alle lopende containers
docker_container:
naam: ' item.Namen[0] | regex_replace("^/", "") '
staat: gestopt
loop: ' docker_info.containers '

Om de . op te slaan stop_all_container.yaml bestand, druk op + X gevolgd door Y en .

Hier heb ik 2 taken gedefinieerd.

De eerste taak gebruikt de Ansible docker_host_info module om een ​​lijst te krijgen van alle draaiende Docker-containers en deze op te slaan in de docker_info variabele.

De tweede taak loopt door de docker_info.containers array vindt de actieve Docker-containernamen en stopt ze een voor een.

Voer nu de stop_all_container.yaml playbook met het volgende commando:

$ ansible-playbook playbooks/stop_all_container.yaml

Het playbook zou met succes moeten werken, zoals je kunt zien in de onderstaande schermafbeelding.

Zoals je kunt zien, zijn er geen Docker-containers actief op mijn externe Docker-host.

$ docker ps

U kunt een lijst maken van alle Docker-containers (actief, gepauzeerd, gestopt) met de volgende opdracht:

$ docker ps --all

Zoals je kunt zien, zijn de gestopte Docker-containers server1, server2, en server3 worden vermeld.

Stop alle Docker-containers die een specifieke afbeelding uitvoeren:

Als u wilt voorkomen dat alle Docker-containers een specifieke Docker-image uitvoeren, dan is deze sectie iets voor u.

Laten we eerst een paar dummy Docker-containers maken.

Ik zal 2 Docker-containers maken (nginx1 en nginx2) de ... gebruiken Nginx Docker-image en 2 Docker-containers (http1 en http2) de ... gebruiken httpd Docker-afbeelding voor de demonstratie.

Om de . te maken nginx1 Docker-container met behulp van de Nginx Docker-image, voer de volgende opdracht uit:

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

Om de . te maken nginx2 Docker-container met behulp van de Nginx Docker-image, voer de volgende opdracht uit:

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

Om de . te maken http1 Docker-container met behulp van de httpd Docker-image, voer de volgende opdracht uit:

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

Om de . te maken http2 Docker-container met behulp van de httpd Docker-image, voer de volgende opdracht uit:

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

Zoals je kunt zien, is de nginx1, nginx2, http1, en http2 Docker-containers worden uitgevoerd op mijn externe Docker-host.

Om te voorkomen dat alle Docker-containers een specifieke Docker-image uitvoeren (laten we zeggen, nginx), maak een nieuw Docker-playbook stop_all_image_containers.yaml in de draaiboeken/ map als volgt:

$ nano playbooks/stop_all_image_containers.yaml

Typ nu de volgende regels in de stop_all_image_containers.yaml het dossier.

- hosts: docker
gebruiker: ansible
taken:
- naam: Krijg een lijst van alle actieve containers
docker_host_info:
containers: True
registreren: docker_info
- naam: stop alle containers met nginx-afbeelding
docker_container:
naam: ' item.Namen[0] | regex_replace("^/", "") '
staat: gestopt
wanneer: item.Afbeelding == 'nginx'
loop: ' docker_info.containers '

Als u klaar bent, drukt u op + X gevolgd door Y en om de te redden stop_all_image_containers.yaml het dossier.

Hier heb ik 2 taken toegevoegd.

De eerste taak gebruikt de Ansible docker_host_info module om een ​​lijst te krijgen van alle draaiende Docker-containers en deze op te slaan in de docker_info variabele.

De tweede taak loopt door de docker_info.containers array vindt de actieve Docker-containernamen en voert de . uit docker_container module voor elke actieve container alleen als de afbeeldingsnaam van de container is Nginx. Vervolgens stopt het de gematchte Docker-containers.

In de tweede taak wordt de volgende regel gebruikt om te controleren of de Docker-container de draait Nginx beeld. Je kunt het desgewenst wijzigen in een andere Docker-afbeeldingsnaam.

Voer nu de stop_all_image_containers.yaml draaiboek als volgt:

$ ansible-playbook playbooks/stop_all_image_containers.yaml

Zoals u kunt zien, zijn alleen de Nginx containers (nginx1 en nginx2) zijn gewijzigd (gestopt). De httpd containers (http1 en http2) worden overgeslagen.

Zoals je kunt zien, nee Nginx Docker-containers worden uitgevoerd op mijn externe Docker-host. Alleen de httpd Docker-containers (http1 en http2) is aan het rennen.

$ docker ps

U kunt een lijst maken van alle Docker-containers (actief, gepauzeerd, gestopt) met de volgende opdracht:

$ docker ps --all

Zoals je kunt zien, zijn de gestopte Docker-containers nginx1 en nginx2 worden vermeld.

Conclusie:

In dit artikel heb ik u laten zien hoe u een actieve Docker-container, alle Docker-containers met een specifieke Docker-image en alle actieve Docker-containers van uw Docker-host kunt stoppen. Om dat te doen, heb ik de Ansible docker_container en docker_host_info modules in dit artikel.

Ga voor meer informatie over deze modules naar de volgende officiële documentatiepagina's van Ansible:.

[1] docker_container - Dockercontainers beheren
[2] docker_host_info - Haalt feiten op over de docker-host en lijsten met objecten van de services

Hoe u uw gamesessie op Linux kunt vastleggen en streamen
In het verleden werd het spelen van games alleen als een hobby beschouwd, maar met de tijd zag de game-industrie een enorme groei in termen van techno...
Beste spellen om te spelen met handtracking
Oculus Quest introduceerde onlangs het geweldige idee van handtracking zonder controllers. Met een steeds toenemend aantal games en activiteiten die f...
OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...