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

Definieren der Mindesthöhe der Inline-Elementspanne

Das Span-Tag wird häufig beim Erstellen von HTML-...

Detaillierte Analyse von Absturzfällen bei MySQL-Instanzen

[Problembeschreibung] Unsere Produktionsumgebung ...

Einführung von ECharts in das Vue-Projekt

Inhaltsverzeichnis 1. Installation 2. Einleitung ...

Vue.js implementiert Kalenderfunktion

In diesem Artikelbeispiel wird der spezifische Co...

So aktivieren Sie die Protokollfunktion für langsame Abfragen in MySQL

Das MySQL-Protokoll für langsame Abfragen ist seh...

Detaillierte Erklärung, wie Sie alle untergeordneten Elemente mit CSS auswählen

Wie wähle ich mit CSS rekursiv alle untergeordnet...

Linux-Installation Redis-Implementierungsprozess und Fehlerlösung

Ich habe heute Redis installiert und es sind eini...

Detaillierte Analyse und Prüfung von SSD-Leistungsproblemen in MySQL-Servern

【Frage】 Wir haben einen HP-Server. Wenn die SSD e...

Docker5 - Vollfunktionaler Hafenlager-Bauprozess

Harbor ist ein Registry-Server auf Unternehmenseb...

So aktivieren Sie die MySQL-Remoteverbindung

Aus Sicherheitsgründen erlaubt MySql-Server nur d...

Tutorial zu HTML-Tabellen-Tags (12): Rahmenstil-Attribut FRAME

Verwenden Sie die FRAME-Eigenschaft, um den Stilt...