Wir drehen verschiedene Container, um verschiedene Workloads einer Anwendung zu verarbeiten, und wir verwenden Docker Compose, um dies einfach zu tun. Jede logisch andere Workload ist als anderes aufgeführt Service. Zum Beispiel wird Ihr Frontend HTTP -Server als Frontend -Dienst aufgeführt.
Alle Dienste, ihre Netzwerkeanforderungen, Speicheranforderungen usw. können in einem Docker-Kompose festgelegt werden.YML -Datei. Wir werden uns auf die Angabe der Speicherauslastung hier konzentrieren.
Sie benötigen die folgenden Tools in Ihrem Arsenal, um mitzumachen:
Wir werden an der Version 2 festhalten.4 für unsere Docker-Kompose.YML -Dateien wie die Version 17 unterstützt.12 und höher des Docker -Motors und höher. Wir hätten mit Version 3 gehen können, die neuer ist, aber es unterstützt die Syntax der alten Speicherbegrenzung nicht. Wenn Sie versuchen, die neuere Syntax zu verwenden, besteht es stattdessen darauf, Docker im Swarm -Modus zu verwenden. Um die Materie für normale Docker -Benutzer einfach zu halten, werde ich mich an Version 2 halten.4
Der größte Teil des Codes würde für Version 3 gleich funktionieren, und wo es einen Unterschied geben wird, werde ich die neuere Syntax für Docker -Swarm -Benutzer erwähnen.
Probenanwendung
Versuchen wir, einen einfachen Nginx-Dienst auf Port 80 mit zunächst die CLI und dann mit einem einfachen Docker-Compose auszuführen.YML. Im nächsten Abschnitt werden wir seine Speicherbeschränkungen und -nutzung untersuchen und unsere Docker-Kompose ändern.YML, um zu sehen, wie die benutzerdefinierten Einschränkungen verhängt werden.
Beginnen wir einen einfachen Nginx-Server mit Docker-Cli:
$ docker run -d -name my -nginx -p 80:80 nginx: neuestSie können sehen, dass der Nginx -Server funktioniert, indem Sie http: // localhost besuchen oder lcoAlhost ersetzen
Mit der IP -Adresse Ihres Docker -Hosts. Dieser Container kann möglicherweise den gesamten verfügbaren Speicher auf Ihrem Docker -Host verwenden (in unserem Fall sind es ca. 2 GB). Um die Speicherauslastung unter anderem zu überprüfen, können wir den Befehl verwenden:
$ docker Statistiken my-nginxDie MEM -Verwendung/-grenze liegt bei 2.133 MIB aus der Gesamt 1 heraus 1.934Gib. Lassen Sie uns diesen Container entfernen und Docker-Compose-Skripte schreiben.
$ docker stoppen my-nginxÄquivalente YML -Datei
Der exakte Container wie oben kann erstellt werden, wenn wir die folgenden Schritte ausführen:
$ mkdir my-composWir erstellen ein neues leeres Verzeichnis und erstellen eine Datei Docker-Compose.YML darin. Wenn wir Docker-compose aus diesem Verzeichnis ausführen, wird nach dieser spezifischen Datei (ignoriert alles andere ignoriert) und erstellen unsere Bereitstellung entsprechend. Fügen Sie die folgenden Inhalte in diesem Bereich hinzu .YML -Datei.
Version: '3'Das Flag -D wird hinzugefügt, damit die neu erstellten Container im Hintergrund ausgeführt werden. Andernfalls verbindet sich das Terminal an die Behälter und beginnt mit Drucken von Berichten daraus. Jetzt können wir die Statistiken der neu erstellten Container (en) sehen:
$ docker Statistiken -allSie werden feststellen, dass ein ähnlicher Container wie zuvor mit ähnlichen Speichergrenzen und sogar Verwendung erstellt wurde. Aus demselben Verzeichnis, das die YML -Datei enthält. Führen Sie den folgenden Befehl aus, um den neu erstellten Container zusammen mit dem erstellten Customer Bridge -Netzwerk zu löschen.
$ docker-compose down
Dadurch wird Docker mit Ausnahme von Bänden, die erstellt wurden.)
Speicherbegrenzungen und Speicherreservierungen
Speichergrenzwerte und Speicherreservierungen sind zwei verschiedene Aspekte, um eine reibungslose Funktionsweise Ihrer Anwendungen und des Docker -Hosts, auf dem Sie ausführen.
Im Allgemeinen wird die Speichergrenze für die Speichermenge vorgeschrieben, die möglicherweise von einem Docker -Container verwendet werden kann. Standardmäßig kann ein Docker -Container wie jeder andere Systemprozess den gesamten verfügbaren Speicher des Docker -Hosts verwenden. Dies kann zu einer außerfeiligen Ausnahme führen, und Ihr System kann sehr gut abstürzen. Auch wenn es nie dazu kommt, kann es dennoch einen anderen Prozess (einschließlich anderer Container) von wertvollen Ressourcen verhungern und die Leistung erneut verletzen. Speichergrenzen stellt sicher, dass hungrige Ressourcen -Container eine bestimmte Grenze nicht übertreffen. Dies begrenzt den Explosionsradius einer schlecht geschriebenen Anwendung auf einige Container, nicht auf den gesamten Host.
Speicherreservierungen hingegen sind weniger starr. Wenn das System nur wenig Speicher läuft und versucht, einige davon zurückzugewinnen. Es versucht, den Speicherverbrauch des Containers auf oder unter die Reservierungsgrenze zu bringen. Wenn jedoch eine Fülle von Speicher vorhanden ist, kann die Anwendung bis zum Hard -Set -Speicherlimit erweitern.
Zusammenfassen:
Wenn die Speicherreservierung größer als die Speichergrenze ist, hat die Speichergrenze Vorrang.
Speichergrenzwerte und Reservierung angeben
Version 2
Kehren wir zum Docker-Compose zurück.YML Wir haben zuvor geschrieben und fügen Sie eine Speicherlimit hinzu. Ändern Sie die Version in 2.4 Aus Gründen, die in Abschnitt Voraussetzungen erörtert werden.
Version 2.4 'Die letzte Zeile legt das Grenzwert für den My-Nginx-Dienst auf 300 MIB fest. Sie können K für KIB und G für GIB und B für nur Bytes verwenden. Die Nummer, bevor es eine Ganzzahl sein muss. Sie können Werte wie 2 nicht verwenden.4m müssten Sie stattdessen 2400k verwenden. Nun, wenn Sie rennen:
$ docker stat -alleSie werden feststellen, dass das Speicherlimit auf 300 MIB eingestellt ist. Das Einstellen von Speicherreservat ist gleich einfach.
Version 2.4 'Version 3 (optional)
Um Version drei zu verwenden, müssen Sie Docker im Schwarmmodus ausführen. Für Windows und Mac können Sie es über das Menü Docker -Einstellungen aktivieren. Linux -Benutzer müssten Docker Swarm init ausführen. Weitere Informationen dazu finden Sie hier. Es ist jedoch kein notwendiger Schritt, und wenn Sie es nicht aktiviert haben, ist das auch in Ordnung. Dieser Abschnitt ist für Menschen bereits Laufen im Schwarmmodus und kann die neuere Version nutzen.
Version: '3'Wir definieren all dies unter Ressourcenoption. Grenzen und Reservierung werden eigene Hauptschlüssel und das Gedächtnis ist nur eine der vielen Ressourcen, die hier verwaltet werden. CPU ist ein weiterer wichtiger Parameter.
Aus der hier verknüpften offiziellen Dokumentation erfahren Sie mehr über Docker-Compose. Sobald Sie den Kern des Schreibens einer Komponierungsdatei erhalten haben.
Sie müssen nicht alles wissen. Suchen Sie einfach nach dem, was Ihre Anwendung erfordert, und die Referenz würde Sie bei der Implementierung durchführen.