docker build ist selbst mit einfachen Befehlen sehr langsam

8

Ich baue ein Docker-Bild auf meinem Raspberry Pi, was natürlich einige Zeit in Anspruch nimmt. Das Problem hierbei ist, dass selbst sehr einfache Befehle in der Docker-Datei, wie das Setzen einer Umgebungsvariablen, die Verwendung von chmod +x für eine einzelne Datei oder das Freigeben von Port 80 Minuten dauern.

Hier ist ein Auszug meiner Dockerfile:

%Vor%

Denken Sie daran, dass dies ein ARMv6 Basisbild ist, damit es auf einem Raspberry Pi laufen kann und ich docker 1.5.0 für das Hypriot Raspberry Pi OS verwende.

Kopieren sie die erstellten Layer für jeden Befehl oder warum dauert jeder der letzten Befehle Minuten?

    
felixbr 01.05.2015, 11:39
quelle

2 Antworten

6

Jede Anweisung von Dockerfile wird in einem Container ausgeführt. Was es bedeutet, ist, dass es für jede Anweisung folgendes macht:

  • Instanziieren Sie einen Container aus dem Bild, das im vorherigen Schritt erstellt wurde, und erstellen Sie eine neue Ebene (die R / W-Datei)
  • Mach das Ding (Pip installieren, etc ..)
  • Commit, das die oberste Ebene als Bildebene kopiert (ich bin mir ziemlich sicher, dass die Ebene kopiert wird)
  • Und Entfernen des Containers (wenn die Option --rm angegeben ist) (Entfernen des Container-Lese- / Schreib-Layers)

Es sind ein paar E / A-Vorgänge beteiligt. Auf einer SSD ist es sehr schnell, genauso wie auf einer guten Festplatte. Wenn Sie es auf dem Raspberry PI erstellen, wenn Sie es auf der SD-Karte (oder MicroSD) bauen, ist die Leistung der SD-Karte wahrscheinlich nicht so gut. Es hängt von der Klasse von dir MicroSD ab und selbst dann denke ich nicht, dass es wirklich gut für die Karte ist. Ich habe es mit einem einfachen Knotenprojekt versucht, und es dauerte definitiv ein paar Minuten statt ein paar Sekunden wie auf meinem Laptop. Es ist Hardware-bezogen (meist I / O für die SD-Karte, vielleicht ein bisschen die CPU, aber ...).

Sie könnten versuchen, eine externe Festplatte zu verwenden, die mit dem Raspberry Pi verbunden ist, und die Andockordner dorthin zu verschieben, um zu sehen, ob die Leistung besser ist.

    
Vincent Demeester 02.05.2015, 10:08
quelle
2

Dies ist eine alte Frage, aber als Referenz haben Sie möglicherweise unter dem ausgewählten Speichertreiber gelitten.

Unter Ubuntu / Debian verwendet Docker standardmäßig einen AUFS-Speichertreiber, der ziemlich schnell ist. Auf anderen Distributionen verwendet Docker standardmäßig einen devicemapper-Speichertreiber, der mit der Standardkonfiguration sehr langsam ist (aufgrund eines "loop-lvm" -Modus, der standardmäßig konfiguriert ist und nicht für den Produktionseinsatz empfohlen wird).

Lesen Sie diese Anleitung als Referenz und erfahren Sie, wie Sie den devicemapper-Speichertreiber in der Produktion (ohne Schleifenmodus) konfigurieren können: Ссылка

    
SRG 24.02.2016 17:50
quelle

Tags und Links