it-swarm.com.de

Von der Verwendung von Loopback-Geräten wird in der Produktion dringend abgeraten

Ich möchte das Docker in meiner CentOS 7.1-Box testen. Ich habe folgende Warnung erhalten:

[[email protected] ~]# docker run busybox /bin/echo Hello Docker
Usage of loopback devices is strongly discouraged for production use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt dm.no_warn_on_loop_devices=true` to suppress this warning.
Hello Docker

Ich möchte wissen, warum und warum diese Warnung unterdrückt wird.

Die CentOS-Instanz wird in einer von vagrant erstellten Virtualbox ausgeführt.

40
rocksun

Die Warnmeldung wird angezeigt, weil Ihre Docker-Speicherkonfiguration ein "Loopback-Gerät" verwendet - ein virtuelles Blockgerät wie /dev/loop0, das tatsächlich von einer Datei in Ihrem Dateisystem gesichert wird. Dies war nie als etwas anderes als ein schneller Hack gedacht, um Docker als Proof of Concept schnell zum Laufen zu bringen.

Sie möchten die Warnung nicht unterdrücken; Sie möchten Ihre Speicherkonfiguration so korrigieren, dass die Warnung nicht mehr ausgegeben wird. Der einfachste Weg, dies zu tun, besteht darin, lokalen Speicherplatz für die Verwendung durch den Speichertreiber devicemapper von Docker zuzuweisen und diesen zu verwenden.

Wenn Sie LVM verwenden und in Ihrer Volume-Gruppe etwas freien Speicherplatz zur Verfügung steht, ist dies relativ einfach. Um beispielsweise dem Docker 100 GB Speicherplatz zu geben, erstellen Sie zunächst ein Daten- und Metadaten-Volume:

# lvcreate -n docker-data -L 100G /dev/my-vg
# lvcreate -n docker-metadata -L1G /dev/my-vg

Und dann konfigurieren Sie Docker so, dass es diesen Bereich verwendet, indem Sie /etc/sysconfig/docker-storage folgendermaßen bearbeiten:

DOCKER_STORAGE_OPTIONS=-s devicemapper --storage-opt dm.datadev=/dev/my-vg/docker-data --storage-opt dm.metadatadev=/dev/my-vg/docker-metadata

Wenn Sie kein LVM verwenden oder nicht über freien Speicherplatz in Ihrem VG verfügen, können Sie ein anderes Blockgerät (z. B. eine Ersatzfestplatte oder -partition) auf ähnliche Weise für Docker verfügbar machen.

Zu diesem Thema gibt es einige interessante Hinweise hier .

55
larsks

Vielen Dank. Das hat mich verrückt gemacht. Ich dachte, bash würde diese Nachricht ausgeben. Ich wollte gerade einen Fehler gegen Bash einreichen. Leider ist keine der angebotenen Optionen für einen Laptop oder solche geeignet, bei denen die Festplatte voll ausgelastet ist. Hier ist meine Antwort für dieses Szenario.

Folgendes habe ich in/etc/sysconfig/docker-storage auf meinem Laptop verwendet:

DOCKER_STORAGE_OPTIONS="--storage-opt dm.no_warn_on_loop_devices=true"

Hinweis: Ich musste den Docker-Dienst neu starten, um einen Effekt zu erzielen. Auf Fedora lautet der Befehl dazu:

systemctl stop docker
systemctl start docker

Es gibt auch nur einen Neustartbefehl (systemctl restart docker), aber es ist eine gute Idee zu prüfen, ob der Stopp wirklich funktioniert hat, bevor er erneut gestartet wird.

Wenn Sie nichts dagegen haben, SELinux in Ihren Containern zu deaktivieren, können Sie auch Overlay verwenden. Hier ist ein Link, der das vollständig beschreibt:

http://www.projectatomic.io/blog/2015/06/notes-on-Fedora-centos-and-docker-storage-drivers/

Zusammenfassend für/etc/sysconfig/docker:

OPTIONS='--selinux-enabled=false --log-driver=journald'

und für/etc/sysconfig/docker-storage:

DOCKER_STORAGE_OPTIONS=-s overlay

Wenn Sie einen Speichertyp ändern, wird beim Neustart des Dockers das gesamte Image- und Containerspeicher zerstört. Sie können dabei auch alles im Ordner/var/lib/docker ablegen:

systemctl stop docker
rm -rf /var/lib/docker
dnf reinstall docker
systemctl start docker

In RHEL 6.6 kann jeder Benutzer mit Docker-Zugriff auf meine privaten Schlüssel zugreifen und Anwendungen als Root mit den einfachsten Hacks über Volumes ausführen. SELinux ist das Einzige, was das in Fedora und RHEL 7 verhindert. Das heißt, es ist nicht klar, wie viel der zusätzlichen RHEL 7-Sicherheit von SELinux außerhalb des Containers kommt und wie viel im Container sich befindet.

Im Allgemeinen eignen sich Loopback-Geräte für Fälle, in denen die Grenze von maximal 100 GB und eine geringfügig verminderte Leistung kein Problem darstellen. Das einzige Problem, das ich finden kann, ist, dass der Docker-Store beschädigt werden kann, wenn während des Laufens ein Festplattenfehler vorliegt. Dies kann wahrscheinlich mit Kontingenten oder anderen einfachen Lösungen vermieden werden.

Für eine Produktionsinstanz ist es jedoch definitiv die Zeit und Mühe wert, dies richtig einzurichten.

100G kann für Ihre Produktionsinstanz übertrieben sein. Container und Bilder sind ziemlich klein. Viele Organisationen betreiben Docker-Container in VMs als zusätzliche Sicherheits- und Isolationsmaßnahme. In diesem Fall haben Sie möglicherweise eine relativ kleine Anzahl von Containern pro VM. In diesem Fall könnte sogar 10G ausreichend sein.

Eine letzte Anmerkung. Selbst wenn Sie direktes LVM verwenden, möchten Sie wahrscheinlich ein zusätzliches Dateisystem für/var/lib/docker. Der Grund ist, dass der Befehl "Docker laden" eine unkomprimierte Version der in diesen Ordner geladenen Bilder erstellt, bevor sie dem Datenspeicher hinzugefügt werden. Wenn Sie also versuchen, es klein und leicht zu halten, sollten Sie andere Optionen als den direkten Lvm ausprobieren.

3
briemers

@ Igor Ganapolsky Feb und @ Mincă Daniel Andrei

Überprüfen Sie dies:

systemctl edit docker --full

Wenn die Anweisung EnvironmentFile nicht im [Service]-Block aufgeführt ist, ist dies kein Glück (ich habe dieses Problem auch auf Centos7), aber Sie können die standardmäßige systemd-Einheit folgendermaßen erweitern:

systemctl edit docker EnvironmentFile=-/etc/sysconfig/docker ExecStart= ExecStart=/usr/bin/dockerd $OPTIONS

Und erstellen Sie eine Datei /etc/sysconfig/docker mit Inhalt:

OPTIONS="-s overlay --storage-opt dm.no_warn_on_loop_devices=true"

0
METAJIJI