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

9 Tipps für das Webseiten-Layout

<br />Verwandte Artikel: 9 praktische Vorsch...

Zusammenfassung der MySQL-DML-Anweisungen

DML-Operationen beziehen sich auf Operationen an ...

Erweiterte Docker-Methode zur schnellen Erweiterung

1. Befehlsmethode Führen Sie den Nginx-Dienst im ...

HTML-Tabellen-Tag-Tutorial (25): vertikales Ausrichtungsattribut VALIGN

In vertikaler Richtung können Sie die Zeilenausri...

So aktivieren Sie die JMX-Überwachung über Tomcat

Erstellen Sie eine Simulationsumgebung: Betriebss...

Detaillierte Erklärung zur Verwendung der JavaScript-Paging-Komponente

Die Paginierungskomponente ist eine häufige Kompo...

Beispielcode zum Konvertieren von HTML-Tabellendaten in das JSON-Format

Die Javascript-Funktion zum Konvertieren von <t...

So deaktivieren Sie die Eslint-Erkennung in Vue (mehrere Methoden)

Inhaltsverzeichnis 1. Problembeschreibung 2. Prob...