Verwenden Sie Shell-Skripte, um Docker-Dienste stapelweise zu starten und zu stoppen

Verwenden Sie Shell-Skripte, um Docker-Dienste stapelweise zu starten und zu stoppen

In letzter Zeit muss ich Docker bei täglichen Tests häufig manuell starten oder stoppen. Daher habe ich beschlossen, ein Shell-Skript zu schreiben, um die manuelle Bedienung zu ersetzen. Darüber hinaus kann das Skript auch remote über ein Python-Skript aufgerufen werden, wie unten gezeigt:

Derzeit codiert das Skript die Container-ID fest im Skript. Natürlich können Sie sie auch steuern, indem Sie Parameter an das Skript übergeben. Sie können sie ändern.

Starten Sie Docker

Das Startskript sieht wie folgt aus:

#!/bin/bash
containerIDs="ad3e4d7fc407 a228730a915f ad3e4d7fc4099"
statusLived="leben"
statusdead="Tot"
notExistContainer="Keine"
Anzahl der Wiederholungen = 3
Funktion GetContainerStatus(){
 ContainerExistiert=$(sudo docker ps -a | grep -i $1 | wc -l ) 
 wenn [ ${containerExist} -gt 0 ]
  Dann
  pid=$(sudo docker stats --format "{{.PIDs}}" --no-stream $1 )
  wenn [ "${pid}" != "0" ]
   Dann 
   echo "${statusLived}"
  anders
   echo "${statusdead}"
  fi
 anders
  echo "${notExistContainer}" 
 fi
}
Funktion StartContainer(){
 sudo docker restart $1
}
für Container-ID in ${containerIDs}
 Tun
 für((i=1;i<=${retryCount};i++))
 Tun
 status=$(GetContainerStatus ${containerID} )
 echo "Der Status des Containers ${containerID} ist ${status}"
 wenn [ "${status}" == ${statusLived} ]
  Dann
  echo "Container ${containerID} läuft bereits"
  brechen
 fi
 wenn [ "${status}" == ${notExistContainer} ]
  Dann
  echo "Container ${containerID} existierte nicht"
  brechen
 fi
 wenn [ "${status}" == ${statusdead} ]
  Dann
  echo "Container ${containerID} gestoppt, Container starten"
  StartContainer ${containerID}
  verifyStatus=$(GetContainerStatus ${containerID} )
  wenn [ "${verifyStatus}" == ${statusLived} ]
   Dann
    echo "Container ${containerID} erfolgreich gestartet"
    brechen
  anders
   echo "${i} erneuter Versuch, Container zu starten"
   StartContainer ${containerID}
  fi
 fi
 Erledigt
Erledigt

Stoppen Sie Docker

Das Stoppskript lautet wie folgt:

#!/bin/bash
containerIDs="589bda1309cd ad3e4d7fc407 a228730a915f ad3e4d7fc4099"
statusLived="leben"
statusdead="Tot"
notExistContainer="Keine"
Anzahl der Wiederholungen = 3
Funktion GetContainerStatus(){
 ContainerExistiert=$(sudo docker ps -a | grep -i $1 | wc -l ) 
 wenn [ ${containerExist} -gt 0 ]
  Dann
  pid=$(sudo docker stats --format "{{.PIDs}}" --no-stream $1 )
  wenn [ "${pid}" != "0" ]
   Dann 
   echo "${statusLived}"
  anders
   echo "${statusdead}"
  fi
 anders
  echo "${notExistContainer}" 
 fi
}
Funktion StopContainer(){
 sudo Docker Stopp $1
}
für Container-ID in ${containerIDs}
 Tun
 für ((i=1;i<=${retryCount};i++))
 Tun
  status=$(GetContainerStatus ${containerID} )
  echo "Der Status des Containers ${containerID} ist ${status}"
  wenn [ "${status}" == ${statusdead} ]
  Dann
  echo "Container ${containerID} bereits gestoppt"
  brechen
  fi
  wenn [ "${status}" == ${notExistContainer} ]
  Dann
  echo "Container ${containerID} existierte nicht"
  brechen
  fi
  wenn [ "${status}" == ${statusLived} ]
  Dann
   echo "Container ${containerID} ist leer, Container stoppen"
   Container stoppen ${containerID}
   verifyStatus=$(GetContainerStatus ${containerID} )
   wenn [ "${verifyStatus}" == ${statusdead} ]
   Dann
    echo "Container ${containerID} erfolgreich stoppen"
    brechen
   anders
   echo "${i} erneut versuchen, Container zu stoppen"
   Container stoppen ${containerID}
   fi
  fi
 Erledigt
Erledigt

Python-Aufrufskript

Das Python-Beispielskript lautet wie folgt:

Paramiko importieren
def StartContainer(svr,port,benutzer,pwd):
 client = paramiko.SSHClient()
 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 client.connect(svr,Port=Port, Benutzername=Benutzer, Passwort=pwd,Timeout=5)
 client.exec_command("cd /home/TestCode/ && bash startContainer.sh")
def StopContainer(svr,port,benutzer,pwd):
 client = paramiko.SSHClient()
 client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 client.connect(svr, Port=Port, Benutzername=Benutzer, Passwort=pwd, Timeout=5)
 client.exec_command("cd /home/TestCode/ && bash stopContainer.sh ")

Zusammenfassen

Oben habe ich Ihnen die Verwendung von Shell-Skripten zum Batch-Starten und -Stoppen von Docker-Diensten vorgestellt. Ich hoffe, es wird Ihnen hilfreich sein!

Das könnte Sie auch interessieren:
  • So kommentieren und entfernen Sie Kommentare stapelweise in der Shell
  • Beispiel für die Verwendung eines Shell-Skripts zum Zählen der Dateigröße und Erstellen von Benutzern in Stapeln
  • Detaillierte Beispiele für das Stapelkopieren von Shellskripten und die Befehlsausführung
  • Shell-Skript implementiert ssh-copy-id, um öffentliche Schlüssel automatisch stapelweise an Remote-Hosts zu senden
  • So löschen Sie ES-Indizes stapelweise mithilfe eines Shell-Skripts
  • Einfache Implementierungsmethode für das Shell-Batch-Curl-Schnittstellenskript
  • Detaillierte Erläuterung der Shell-Befehlszeilen-Stapelverarbeitung von Bilddateinamen
  • So verwenden Sie die Shell, um Batchvorgänge auf mehreren Servern auszuführen

<<:  Konzept und Anwendungsbeispiele für die MySQL-Indexkardinalität

>>:  Vue implementiert Studentenverwaltungsfunktion

Artikel empfehlen

Detailliertes Tutorial zur Konfiguration von Docker nginx + https-Subdomains

Heute habe ich zufällig einem Freund beim Umzug s...

Was bedeutet Eingabetyp und wie kann die Eingabe begrenzt werden?

Gängige Methoden zur Begrenzung der Eingabe 1. Um ...

Stellen Sie die Grafana+Prometheus-Konfiguration mit Docker bereit

docker-compose-monitor.yml Version: '2' N...

So laden Sie das JAR-Paket über die Webseite auf Nexus hoch

Wie lädt man das JAR-Paket in ein privates Lager ...

So fügen Sie Spalten in einer MySQL-Datenbank hinzu, löschen und ändern sie

Dieser Artikel beschreibt anhand eines Beispiels,...

Methode zum Knacken der Registrierung der FlashFXP-FTP-Clientsoftware

Die Downloadadresse von FlashFXP lautet: https://...

Vue verwendet drei Methoden zum Aktualisieren der Seite

Beim Schreiben von Projekten stoßen wir häufig au...

Beispielcode zum Erstellen eines minimierten Header-Effekts nur mit CSS

Zusammengeklappte Kopfzeilen sind eine großartige...

JavaScript, um einen Lotterieeffekt zu erzielen

In diesem Artikel wird der spezifische JavaScript...

So kapseln Sie Paging-Komponenten manuell in Vue3.0

In diesem Artikel wird der spezifische Code der m...

Installieren Sie JDK8 im RPM-Modus auf CentOS7

Nach der erfolgreichen Installation von CentOS 7 ...