Docker Compose - Speichergrenzen

Docker Compose - Speichergrenzen
Docker Compose ist ein starkes Dienstprogramm. Es spart Zeit und reduziert Fehler bei der Bereitstellung Ihrer dockerisierten Anwendung. Normalerweise ist es keine großartige Idee, den gesamten Stapel einschließlich des Frontend, des Datenbankservers usw. aus einem einzigen einen einzelnen Container auszuführen.

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.

Voraussetzungen

Sie benötigen die folgenden Tools in Ihrem Arsenal, um mitzumachen:

  1. Grundlegendes Verständnis von Docker
  2. Docker für Windows oder Mac oder wenn Sie Linux ausführen, Dockerce für Linux
  3. Docker Compose Binary (Windows und Mac -Benutzer haben dies bereits installiert)

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: neuest

Sie 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-nginx
Container -ID -Name CPU % MEM -Nutzung/Limit MEM % Netto -E/A -Block -E/A -PIDs
6eb0091c0cf2 my-nginx 0.00% 2.133MIB / 1.934Gib 0.11% 3.14 kb / 2.13KB 0b / 0b 2

Die 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
$ docker rm my-nginx

Äquivalente YML -Datei

Der exakte Container wie oben kann erstellt werden, wenn wir die folgenden Schritte ausführen:

$ mkdir my-compos
$ cd my-compos
$ vim docker-compose.YML

Wir 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'
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Häfen:
- "80:80"
$ docker -compose up -d

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 -all
Container -ID -Name CPU% MEM -Nutzung/Limit MEM% Netto -E/A -Block -E/A -PIDs
5f8a1e2c08ac my-compose_my-nginx_1 0.00% 2.25mib/1.934Gib 0.11% 1.65 KB/0B 7.35 MB/0B 2

Sie 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:

  1. Speichergrenze: Eine strenge Obergrenze für die Menge an Speicher, die einem Container zur Verfügung gestellt wurde.
  2. Speicherreservierung: Dies sollte als minimale Speichermenge festgelegt werden, die eine Anwendung ordnungsgemäß ausgeführt hat. Es stürzt oder verhalten sich also nicht, wenn das System versucht, einen Teil des Speichers zurückzugewinnen.

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 '
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Häfen:
- "80:80"
mem_limit: 300m

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 -alle
Container -ID -Name CPU % MEM -Nutzung/Limit MEM % Netto -E/A -Block -E/A -PIDs
44114d785d0a my-compose_my-nginx_1 0.00% 2.141MIB/300MIB 0.71% 1.16 KB/0B 0B/0B 2

Sie werden feststellen, dass das Speicherlimit auf 300 MIB eingestellt ist. Das Einstellen von Speicherreservat ist gleich einfach.

Version 2.4 '
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Häfen:
- "80:80"
mem_limit: 300m
mem_reservation: 100m

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'
Dienstleistungen:
my-nginx:
Bild: Nginx: Neueste
Häfen:
- "80:80"
einsetzen:
Ressourcen:
Grenzen:
Speicher: 300 m
Reservierungen:
Speicher: 100 m

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.

Weitere Informationen

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.