Schritte nach der Installation für Linux
Dieser Abschnitt enthält optionale Verfahren zur Konfiguration von Linux-Hosts für eine bessere Zusammenarbeit mit Docker.
Verwalten von Docker als Nicht-Root-Benutzer
Der Docker-Dämon bindet sich an einen Unix-Socket statt an einen TCP-Port. Standardmäßig gehört dieser Unix-Socket dem Benutzer root und andere Benutzer können nur mit sudo darauf zugreifen. Der Docker-Daemon läuft immer als Benutzer root.
Wenn Sie dem Docker-Befehl nicht sudo voranstellen wollen, erstellen Sie eine Unix-Gruppe namens docker und fügen Sie ihr Benutzer hinzu. Wenn der Docker-Daemon startet, erzeugt er einen Unix-Socket, auf den die Mitglieder der Gruppe docker zugreifen können.
So erstellen Sie die Docker-Gruppe und fügen Ihren Benutzer hinzu:
- Legen Sie die Docker-Gruppe an.
$ sudo groupadd docker
2. Fügen Sie Ihren Benutzer zur Docker-Gruppe hinzu.
$ sudo usermod -aG docker $USER
3. Melden Sie sich ab und melden Sie sich wieder an, damit Ihre Gruppenmitgliedschaft neu bewertet wird.
Wenn Sie auf einer virtuellen Maschine testen, kann es erforderlich sein, die virtuelle Maschine neu zu starten, damit die Änderungen wirksam werden.
Melden Sie sich auf einer Desktop-Linux-Umgebung wie X Windows vollständig von Ihrer Sitzung ab und melden Sie sich dann wieder an.
Unter Linux können Sie auch den folgenden Befehl ausführen, um die Änderungen an Gruppen zu aktivieren:
$ newgrp docker
4. Vergewissern Sie sich, dass Sie Docker-Befehle ohne sudo ausführen können.
$ docker run hello-world
Dieser Befehl lädt ein Testbild herunter und führt es in einem Container aus. Wenn der Container läuft, druckt er eine Informationsmeldung aus und beendet sich.
Wenn Sie anfänglich Docker-CLI-Befehle mit sudo ausgeführt haben, bevor Sie Ihren Benutzer zur Docker-Gruppe hinzugefügt haben, wird möglicherweise der folgende Fehler angezeigt, der darauf hinweist, dass Ihr Verzeichnis ~/.docker/ aufgrund der sudo-Befehle mit falschen Berechtigungen erstellt wurde.
Warnung
Fehler beim Laden der Konfigurationsdatei: /home/benutzer/.docker/config.json –
stat /home/user/.docker/config.json: Berechtigung verweigert.
Um dieses Problem zu beheben, entfernen Sie entweder das Verzeichnis ~/.docker/ (es wird automatisch neu erstellt, aber alle benutzerdefinierten Einstellungen gehen verloren), oder ändern Sie seine Eigentümer und Berechtigungen mit den folgenden Befehlen:
$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
Docker so einstellen das beim Hochfahren des Servers automatisch startet:
Die meisten aktuellen Linux-Distributionen (RHEL, CentOS, Fedora, Ubuntu 16.04 und höher) verwenden systemd, um zu verwalten, welche Dienste beim Hochfahren des Systems gestartet werden. Ubuntu 14.10 und niedriger verwenden upstart.
systemd
$ sudo systemctl enable docker
Um dieses Verhalten zu deaktivieren, verwenden Sie stattdessen disable.
$ sudo systemctl disable docker
upstart
Docker wird automatisch so konfiguriert, dass er beim Booten mit upstart startet. Um dieses Verhalten zu deaktivieren, verwenden Sie den folgenden Befehl:
$ echo manual | sudo tee /etc/init/docker.override
chkconfig
$ sudo chkconfig docker on
Verwenden einer anderen Speicher-Engine:
Informationen zu den verschiedenen Speicher-Engines finden Sie unter Speichertreiber. Die Standard-Speicher-Engine und die Liste der unterstützten Speicher-Engines hängen von der Linux-Distribution Ihres Hosts und den verfügbaren Kernel-Treibern ab.
Konfigurieren Sie den Standard-Protokollierungstreiber:
Docker bietet die Möglichkeit, Protokolldaten von allen Containern, die auf einem Host laufen, über eine Reihe von Protokollierungstreibern zu sammeln und anzuzeigen. Der Standard-Protokollierungstreiber, json-file, schreibt Protokolldaten in JSON-formatierte Dateien auf dem Host-Dateisystem. Mit der Zeit werden diese Protokolldateien immer größer, was zu einer potenziellen Erschöpfung der Festplattenressourcen führt. Um solche Probleme zu lindern, konfigurieren Sie entweder einen alternativen Protokollierungstreiber wie Splunk oder Syslog oder richten Sie eine Protokollrotation für den Standardtreiber ein. Wenn Sie einen alternativen Protokollierungstreiber konfigurieren, lesen Sie unter Verwendung von Docker-Protokollen zum Lesen von Container-Protokollen für entfernte Protokollierungstreiber.
Konfigurieren Sie, wo der Docker-Dämon auf Verbindungen lauscht:
Standardmäßig lauscht der Docker-Dämon auf einem UNIX-Socket auf Verbindungen, um Anfragen von lokalen Clients anzunehmen. Es ist möglich, Docker zu erlauben, Anfragen von entfernten Hosts anzunehmen, indem man ihn so konfiguriert, dass er sowohl auf einer IP-Adresse und einem Port als auch auf dem UNIX-Socket lauscht. Ausführlichere Informationen zu dieser Konfigurationsoption finden Sie im Abschnitt “Binden Sie Docker an einen anderen Host/Port oder einen UNIX-Socket” des Docker-CLI-Referenzartikels.
Sichern Sie Ihre Verbindung ab.
Bevor Sie Docker so konfigurieren, dass es Verbindungen von entfernten Hosts akzeptiert, ist es von entscheidender Bedeutung, dass Sie die Auswirkungen auf die Sicherheit verstehen, die das Öffnen von Docker auf das Netzwerk hat. Wenn keine Schritte zur Sicherung der Verbindung unternommen werden, ist es für entfernte Nicht-Root-Benutzer möglich, Root-Zugriff auf den Host zu erhalten. Weitere Informationen darüber, wie TLS-Zertifikate zur Sicherung dieser Verbindung verwendet werden können, finden Sie in diesem Artikel über den Schutz des Docker-Daemon-Sockets.
Die Konfiguration von Docker zur Annahme von Fernverbindungen kann mit der Datei docker.service systemd für Linux-Distributionen, die systemd verwenden, wie aktuelle Versionen von RedHat, CentOS, Ubuntu und SLES, oder mit der Datei daemon.json erfolgen, die für Linux-Distributionen empfohlen wird, die systemd nicht verwenden.
systemd vs daemon.json
Wenn Sie Docker so konfigurieren, dass er sowohl mit der Unit-Datei systemd als auch mit der Datei daemon.json auf Verbindungen lauscht, entsteht ein Konflikt, der den Start von Docker verhindert.
Konfiguration des Fernzugriffs mit systemd unit file.
1.verwenden Sie den Befehl sudo systemctl edit docker.service, um eine Überschreibungsdatei für docker.service in einem Texteditor zu öffnen.
2.fügen Sie die folgenden Zeilen hinzu oder ändern Sie sie und ersetzen Sie dabei Ihre eigenen Werte.
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://127.0.0.1:2375
3. Speichern der Datei
4. Reload der systemctl configuration
$ sudo systemctl daemon-reload
5. Docker neustarten
$ sudo systemctl restart docker.service
6. Prüfen Sie, ob die Änderung berücksichtigt wurde, indem Sie die Ausgabe von netstat überprüfen, um zu bestätigen, dass Dockerd den konfigurierten Port abhört.
$ sudo netstat -lntp | grep dockerd
tcp 0 0 127.0.0.1:2375 0.0.0.0:* LISTEN 3758/dockerd
Konfigurieren des Fernzugriffs mit daemon.json
Legen Sie das Array hosts in der Datei /etc/docker/daemon.json so fest, dass es eine Verbindung zum UNIX-Socket und eine IP-Adresse herstellt, und zwar wie folgt:
{
"hosts": ["unix:///var/run/docker.sock", "tcp://127.0.0.1:2375"]
}
2. Docker neustarten
3. Prüfen Sie, ob die Änderung berücksichtigt wurde, indem Sie die Ausgabe von netstat überprüfen, um zu bestätigen, dass Dockerd den konfigurierten Port abhört.
DNS-Server für Docker angeben
Der Standardspeicherort der Konfigurationsdatei ist /etc/docker/daemon.json. Sie können den Speicherort der Konfigurationsdatei mit dem Daemon-Flag –config-file ändern. In der folgenden Dokumentation wird davon ausgegangen, dass sich die Konfigurationsdatei unter /etc/docker/daemon.json befindet.
Erstellen oder bearbeiten Sie die Konfigurationsdatei des Docker-Daemons, die sich standardmäßig in der Datei /etc/docker/daemon.json befindet, welche die Konfiguration des Docker-Daemons steuert.
$ sudo nano /etc/docker/daemon.json
Fügen Sie einen dns-Schlüssel mit einer oder mehreren IP-Adressen als Werte hinzu. Wenn die Datei einen bestehenden Inhalt hat, brauchen Sie nur die dns-Zeile hinzuzufügen oder zu bearbeiten.
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
Wenn Ihr interner DNS-Server öffentliche IP-Adressen nicht auflösen kann, schließen Sie mindestens einen DNS-Server ein, der dies kann, damit Sie eine Verbindung zum Docker Hub herstellen können und damit Ihre Container Internet-Domänennamen auflösen können.
Speichern und schließen Sie die Datei.
Starten Sie den Docker-Daemon neu.
$ sudo service docker restart
Überprüfen Sie, ob Docker externe IP-Adressen auflösen kann, indem Sie versuchen, ein Bild zu ziehen:
$ docker run --rm -it alpine ping -c4 <my_internal_host>
PING google.com (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: seq=0 ttl=41 time=7.597 ms
64 bytes from 192.168.1.2: seq=1 ttl=41 time=7.635 ms
64 bytes from 192.168.1.2: seq=2 ttl=41 time=7.660 ms
64 bytes from 192.168.1.2: seq=3 ttl=41 time=7.677 ms
DNSMASQ DEAKTIVIEREN
Ubuntu
Wenn Sie es vorziehen, die Konfiguration des Docker-Daemons nicht so zu ändern, dass eine bestimmte IP-Adresse verwendet wird, folgen Sie diesen Anweisungen, um dnsmasq in NetworkManager zu deaktivieren.
Bearbeiten Sie die Datei /etc/NetworkManager/NetworkManager.conf.
Kommentieren Sie die Zeile dns=dnsmasq aus, indem Sie am Anfang der Zeile ein #-Zeichen hinzufügen.
# dns=dnsmasq
Speichern und schließen Sie die Datei.
Starten Sie sowohl NetworkManager als auch Docker neu. Als Alternative können Sie Ihr System neu starten.
$ sudo restart network-manager
$ sudo restart docker
Erlauben Sie den Zugriff auf die Remote-API durch eine Firewall.
Wenn Sie auf demselben Host, auf dem Sie Docker ausführen, eine Firewall betreiben und von einem anderen Host aus auf die Docker Remote-API zugreifen möchten und der Remote-Zugriff aktiviert ist, müssen Sie Ihre Firewall so konfigurieren, dass eingehende Verbindungen auf dem Docker-Port zugelassen werden. Der Standardwert ist 2376, wenn TLS-verschlüsselter Transport aktiviert ist, oder 2375 andernfalls.
Zwei gebräuchliche Firewall-Daemonen sind UFW (Unkomplizierte Firewall) (oft für Ubuntu-Systeme verwendet) und firewalld (oft für RPM-basierte Systeme verwendet). Konsultieren Sie die Dokumentation Ihres Betriebssystems und Ihrer Firewall, aber die folgenden Informationen könnten Ihnen den Einstieg erleichtern. Diese Optionen sind ziemlich freizügig und Sie möchten vielleicht eine andere Konfiguration verwenden, die Ihr System stärker sperrt.
UFW: Setzen Sie DEFAULT_FORWARD_POLICY=”ACCEPT” in Ihrer Konfiguration.
Firewall: Fügen Sie Ihrer Richtlinie Regeln ähnlich den folgenden hinzu (eine für eingehende Anfragen und eine für ausgehende Anfragen). Stellen Sie sicher, dass die Namen der Schnittstellen und Kettennamen korrekt sind.
<direct>
[ <rule ipv="ipv4" table="filter" chain="FORWARD_direct" priority="0"> -i zt0 -j ACCEPT </rule> ]
[ <rule ipv="ipv4" table="filter" chain="FORWARD_direct" priority="0"> -o zt0 -j ACCEPT </rule> ]
</direct>
Ihr Kernel unterstützt keine cgroup-Swap-Limit-Fähigkeit
Auf Ubuntu- oder Debian-Hosts sehen Sie möglicherweise Meldungen ähnlich der folgenden, wenn Sie mit einem Image arbeiten.
WARNUNG: Ihr Kernel unterstützt keine Swap-Limit-Fähigkeiten. Die Begrenzung wird verworfen.
Diese Warnung erscheint nicht auf RPM-basierten Systemen, die diese Fähigkeiten standardmäßig aktivieren.
Wenn Sie diese Fähigkeiten nicht benötigen, können Sie die Warnung ignorieren. Sie können diese Fähigkeiten unter Ubuntu oder Debian aktivieren, indem Sie diesen Anweisungen folgen. Speicher- und Swap-Accounting verursachen einen Overhead von ca. 1% des gesamten verfügbaren Speichers und einen Leistungsabfall von insgesamt 10%, selbst wenn Docker nicht läuft.
Melden Sie sich auf dem Ubuntu- oder Debian-Host als Benutzer mit sudo-Privilegien an.
Bearbeiten Sie die Datei /etc/default/grub. Fügen Sie die Zeile GRUB_CMDLINE_LINUX hinzu oder bearbeiten Sie sie, um die folgenden zwei Schlüssel-Wert-Paare hinzuzufügen:
GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1"
- Save and close the file.
- Update GRUB.
$ sudo update-grub
Wenn Ihre GRUB-Konfigurationsdatei eine falsche Syntax aufweist, tritt ein Fehler auf. Wiederholen Sie in diesem Fall die Schritte 2 und 3.
Die Änderungen werden beim Neustart des Systems wirksam.
_________________________________________________________________________________________________________________________________________________________________________________
Orientierung und Einrichtung
Das Docker Quickstart Schulungsmodul lehrt Sie, wie das geht:
Einrichten Ihrer Docker-Umgebung
Bauen und betreiben Sie Ihr Image
Bilder auf Docker Hub freigeben
Docker-Konzepte
Docker ist eine Plattform für Entwickler und Systemadministratoren zum Erstellen, Ausführen und Freigeben von Anwendungen mit Containern. Die Verwendung von Containern zur Bereitstellung von Anwendungen wird als Containerisierung bezeichnet. Container sind nicht neu, aber ihre Verwendung zur einfachen Bereitstellung von Anwendungen schon.
Containerisierung wird immer beliebter, weil Container es sind:
flexibel sind: Selbst die komplexesten Anwendungen können containerisiert werden.
leichtgewichtig sind: Container nutzen und teilen sich den Host-Kernel, wodurch sie hinsichtlich der Systemressourcen wesentlich effizienter sind als virtuelle Maschinen.
Tragbar: Sie können lokal erstellen, in der Cloud bereitstellen und überall ausgeführt werden.
Lose gekoppelt: Container sind in hohem Maße autark und gekapselt, so dass Sie einen Container ersetzen oder aktualisieren können, ohne andere zu stören.
Skalierbar: Sie können Container-Replikate vergrößern und automatisch über ein Rechenzentrum verteilen.
Sicher: Container wenden aggressive Einschränkungen und Isolierungen auf Prozesse an, ohne dass eine Konfiguration seitens des Benutzers erforderlich ist.
Bilder und Container
Im Grunde genommen ist ein Container nichts anderes als ein laufender Prozess, auf den einige zusätzliche Kapselungsfunktionen angewendet werden, um ihn vom Host und von anderen Containern isoliert zu halten. Einer der wichtigsten Aspekte der Container-Isolierung ist, dass jeder Container mit seinem eigenen privaten Dateisystem interagiert; dieses Dateisystem wird durch ein Docker-Image bereitgestellt. Ein Image enthält alles, was zur Ausführung einer Anwendung benötigt wird – den Code oder Binärcode, Laufzeiten, Abhängigkeiten und alle anderen erforderlichen Dateisystemobjekte.
Container und virtuelle Maschinen
Ein Container läuft nativ unter Linux und teilt sich den Kernel des Host-Rechners mit anderen Containern. Er führt einen diskreten Prozess aus, der nicht mehr Speicher als jede andere ausführbare Datei beansprucht, was ihn leichtgewichtig macht.
Im Gegensatz dazu läuft auf einer virtuellen Maschine (VM) ein vollwertiges “Gast”-Betriebssystem mit virtuellem Zugriff auf die Host-Ressourcen über einen Hypervisor. Im Allgemeinen verursachen VMs einen hohen Overhead, der über das hinausgeht, was von Ihrer Anwendungslogik verbraucht wird.
Richten Sie Ihre Docker-Umgebung ein
Docker Desktop herunterladen und installieren
Docker Desktop ist eine einfach zu installierende Anwendung für Ihre Mac- oder Windows-Umgebung, mit der Sie in wenigen Minuten mit der Codierung und Containerisierung beginnen können. Docker Desktop enthält alles, was Sie zum Erstellen, Ausführen und Freigeben containerisierter Anwendungen direkt von Ihrem Rechner aus benötigen.
Folgen Sie den für Ihr Betriebssystem geeigneten Anweisungen, um Docker Desktop herunterzuladen und zu installieren.
$ docker --version
Docker version 19.03.13, build 4484c46d9d
Testen der Installation
Testen Sie, ob Ihre Installation funktioniert, indem Sie das hello-world Docker-Image ausführen:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
ca4f61b1923c: Pull complete
Digest: sha256:ca0eeb6fb05351dfc8759c20733c91def84cb8007aa89a5bf606bc8b315b9fc7
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
2. Führen Sie das Docker-Bild ls aus, um das Hallo-Welt-Bild aufzulisten, das Sie auf Ihren Rechner heruntergeladen haben.
Listen Sie den Hallo-World-Container auf (der vom Bild erzeugt wird), der nach der Anzeige seiner Nachricht beendet wird. Wenn er immer noch läuft, benötigen Sie die Option –all nicht:
$ docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS
54f4984ed6a8 hello-world "/hello" 20 seconds ago Exited (0) 19 seconds ago
Schlussfolgerung
Zu diesem Zeitpunkt haben Sie Docker Desktop auf Ihrem Entwicklungsrechner installiert und einen kurzen Test durchgeführt, um sicherzustellen, dass Sie für die Erstellung und Ausführung Ihrer ersten containerisierten Anwendung eingerichtet sind.
Viel Erfolg!
1 Comment