Docker-Startzeit

Docker-Startzeit

docker runWie kann ich die Ausführung von: und Befehlen beschleunigen docker exec?

Das Ausführen des Befehls dauert 0,02 Sekunden Benutzerzeit und 0,02 Sekunden Systemzeit (das wäre in meinem Fall in Ordnung), aber jeweils etwa 0,5 Sekunden in Echtzeit (nicht akzeptabel).

Zum Beispiel:

$ time sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k --memory-swap=100000k -d -w /tmp -v /home/asd:/tmp my_image
187d****5037
sudo docker run --cap-add SYS_ADMIN -i -t --memory=100000k  -d -w /tmp -v    0,02s user 0,02s system 6% cpu 0,496 total

Kann ich den Prozess der Containerausführung irgendwie beschleunigen oder zumindest verstehen, warum diese Zeitverschwendung so stattfindet?

my_imagewird erstellt ubuntuund das erstellte Image benötigt etwa 800 MB. Aber soweit ich es überprüft habe, spielt das keine große Rolle – die Reduzierung der Imagegröße auf 200 MB ändert nichts an der Ausführungszeit des obigen Befehls.

Antwort1

Der Mehraufwand wird höchstwahrscheinlich mit dem Erstellen und Entfernen von Namespaces verbracht. Um herauszufinden, wofür die Zeit aufgewendet wird, können Sie Ihren Container auf verschiedene Arten ausführen.

Eliminieren Sie zunächst den Befehl „sudo“. Melden Sie sich als Root an sudo -sund führen Sie von dort aus Befehle aus.

Versuchen Sie als Nächstes, den Lauf in separate Schritte zum Erstellen und Starten aufzuteilen. So erfahren Sie, ob die Zeit für das Erstellen oder Ausführen des Containers aufgewendet wird:

$ time docker create --cap-add SYS_ADMIN -itd \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

$ time docker start -ai $(docker ps -ql)

Da Sie Ihren Container getrennt ausführen, überlegen Sie, ob Sie die TTY-Zuweisung entfernen können und ob Sie stdin konfigurieren müssen, indem Sie Folgendes entfernen -it:

$ time sudo docker run --cap-add SYS_ADMIN -d \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

Anschließend können Sie sich ansehen, wie viel Zeit zusätzlich benötigt wird, um die einzelnen Namespaces für Dinge wie das Netzwerk und die PID zu erstellen, indem Sie sie deaktivieren und auf den vorhandenen Host-Namespace setzen:

$ time sudo docker run --cap-add SYS_ADMIN -itd \
  --net=host --pid=host --uts=host \
  --memory=100000k --memory-swap=100000k \
  -w /tmp -v /home/asd:/tmp my_image

Von Docker aus können Sie die ausgeführten Aktionen anzeigen docker eventsund den Zeitstempel jeder einzelnen Aktion überprüfen.

Bedenken Sie zum Schluss, dass Docker eine Client/Server-Anwendung ist und ein Teil der tatsächlichen Zeit auf Socket-/Netzwerkkommunikation zwischen Client und Server entfallen kann.

verwandte Informationen