Dieser Artikel ist ein Ergänzungstext zu einer Webinar-Serie über die Deployment und Management von containerisierten Workloads im Cloud. Die Serie umfasst die Grundlagen von Containern, wie beispielsweise das Lebenszyklusmanagement, das Deployieren von Multi-Container-Anwendungen, das Skalieren von Workloads sowie das Verstehen von Kubernetes, zudem werden auch die Best Practices für die Bereitstellung statischer Anwendungen hervorgehoben.
Dieser Tutorial enthält die Konzepte und Befehle, die im ersten Session der Reihe, Getting Started with Containers, behandelt wurden.
Einführung
Docker ist eine Plattform zur Bereitstellung und Verwaltung von containerisierten Anwendungen. Container sind bei Entwicklern, Administratoren und DevOps-Ingenieuren beliebt wegen der Flexibilität, die sie bieten.
Docker hat drei wichtige Komponenten:
- Docker Engine
- Docker Tools
- Docker Registry
Der Docker Engine stellt die grundlegenden Funktionen bereit, mit denen Sie Container managen können. Er interagiert mit dem unterliegenden Linux-Betriebssystem, um einfache APIs zu verfügbar zu machen, die mit dem Lebenszyklus von Containern interaktionieren.
Die Docker Tools sind eine Set von Befehlzeilentools, die mit dem vom Docker Engine ausgelieferten API interagieren. Sie werden zum Starten der Container, zum Erstellen neuer Images, zur Konfiguration von Storage und Netzwerken usw. verwendet, die auf die Lebenszyklusoperationen eines Containers Einfluss haben.
Das Docker-Repository ist die Stelle, wo Containerimages gespeichert werden. Jeder Image kann mehrere Versionen durch einzigartige Tags identifiziert haben. Benutzer holen existierende Images aus dem Repository herunter und stellen neue Images hoch. Docker Hub ist eine von Docker, Inc. gehostete Registrierung. Es ist auch möglich, einen Registrierungsserver in Ihrem eigenen Umfeld zu installieren, um die Images näher an den Motor zu bringen.
Am Ende dieser Tutorials hast du Docker auf einem DigitalOcean Droplett installiert,Container verwaltet, Bilder mit Images gearbeitet, Hinzufügungen zur persistenz getestet und einen privaten Registrierungsdienst eingerichtet.
Voraussetzungen
Um dieses Tutorial zu folgen, benötigen Sie:
-
Einen Ubuntu 16.04 Droplet, der nach diesem Ubuntu 16.04 initial server setup tutorial installiert wurde, inklusive eines nicht-root-Benutzers und einer Firewall.
-
Ein Docker Hub-Konto. Diese Übersicht über Docker Hub wird Ihnen beim Starten helfen.
Standardmäßig benötigt das docker
-Kommando root-Rechte. Allerdings können Sie das Kommando ohne das sudo
-Präfix ausführen, indem Sie docker
als Benutzer in der docker-Gruppe ausführen.
Um Ihren Droplet auf diese Weise zu konfigurieren, führen Sie das Kommando sudo usermod -aG docker ${USER}
aus. Dies fügt dem aktuellen Benutzer der docker
-Gruppe hinzu. Dann führen Sie das Kommando su - ${USER}
aus, um die neue Gruppenzugehörigkeit anzuwenden.
Dieser Leitfaden geht davon aus, dass Ihr Server so konfiguriert ist, dass das docker
-Kommando ohne das sudo
-Präfix ausgeführt werden kann.
Schritt 1 — Docker installieren
Nachdem Sie sich über SSH auf dem Droplet angemeldet haben, führen Sie die folgenden Befehle aus, um alle bereits installierten docker-bezogenen Pakete zu entfernen und dann Docker aus dem offiziellen Repository zu installieren:
Nach der Installation von Docker bestätigen Sie die Installation mit den folgenden Befehlen:
Der obige Befehl zeigt Details des in der Umgebung deployierten Docker-Engines auf. Der nächste Befehl überprüft, ob die Docker-Tools richtig installiert und konfiguriert sind. Es sollte die Version sowohl des Docker-Engines als auch der Tools ausgeben.
##Schritt 2 — Starten von Containern
Docker-Container werden von vorhandenen Images gestartet, die im Register gespeichert sind. Images in Docker können in privaten oder öffentlichen Repositories gespeichert werden. Private Repositories erfordern von Benutzern eine Authentifizierung, bevor Images gezogen werden können. Öffentliche Images können von jedem zugegriffen werden.
Um nach einem Image namens hello-world
zu suchen, führen Sie den Befehl aus:
Es könnten mehrere Images dem Namen hello-world
entsprechen. Wählen Sie das mit den meisten Sternen versehene Image, das die Beliebtheit des Images anzeigt.
Überprüfen Sie die verfügbaren Images in Ihrer lokalen Umgebung mit dem folgenden Befehl:
Da wir bisher keine Container gestartet haben, werden keine Images angezeigt. Wir können nun das Image herunterladen und lokal ausführen:
Wenn wir den Befehl docker run
ohne das Herunterziehen des Images ausführen, wird das Docker-Engine zuerst das Image herunterziehen und dann ausführen. Bei erneutem Ausführen des Befehls docker images
wird angezeigt, dass wir das Image hello-world
lokal verfügen.
Lassen Sie uns ein bedeutendesreiches Container starten: einen Apache-Web-Server.
Sie könnten zusätzliche Optionen für den Befehl docker run
erkennen. Hier ist eine Erklärung dieser Schalter:
-p
— Dieser Befehlt informiert das Docker-Engine, dass der Container seine Portnummer80
auf die des Hosts80
exponieren soll. Da Apache auf Port80
läuft, müssen wir sie auf dem Host exponieren.--name
— Diese Option setzt einen Namen für den laufenden Container fest. Wenn dieser Befehl ausgelassen wird, wird Docker Engine dem Container eine zufällige Nummer zuweisen.-d
— Diese Option befeuert das Docker-Engine, den Container im Detached-Modus zu starten. Ohne diese Option blockiert der Container den Shell-Zugriff, daher ist es notig, den Container in den Hintergrund zu schicken, damit wir die Shell weiterhin nutzen können. Um zu prüfen ob unser Container tatsächlich im Hintergrund läuft, versuchen Sie folgendes Kommando:
Die Ausgabe zeigt uns, dass der Container namens web
mit Port 80
auf die des Hosts 80
mapst ist.
Nun erstellen Sie einen Web-Server-Zugriff:
Um den Web-Server zu testen:
Schließen und entfernen Sie den laufenden Container mit den folgenden Befehlen:
Eine erneute Ausgabe von docker ps
bestätigt, dass der Container beendet ist.
Schritt 3 — Speicherzugriffe hinzufügen
Container sind flüchtig, was bedeutet, dass alles, was in einem Container gespeichert ist, verloren geht, wenn der Container beendet wird. Um Daten über die Lebensdauer eines Containers hinaus zu erhalten, müssen wir einen Volume an den Container anhängen. Volumes sind Verzeichnisse aus dem Host-Dateisystem.
Fangen wir damit an, ein neues Verzeichnis auf dem Host zu erstellen:
Nun starten wir den Container mit einem neuen Schalter, um das Verzeichnis htdocs
zu mounten und auf das Dokumentenroot des Apache-Webservers zu zeigen:
Der Schalter -v
verweist das Verzeichnis htdocs
innerhalb des Containers auf das Dateisystem des Hosts. Jegliche Änderungen an diesem Verzeichnis werden an beiden Standorten sichtbar sein.
Zugreifen Sie auf das Verzeichnis aus dem Container, indem Sie den Befehl ausführen:
Dieser Befehl hängt unseren Terminal an die Shell der Container in einem interaktiven Modus an. Sie sollten sehen können, dass Sie jetzt innerhalb des Containers sind.
Navigieren Sie zum Verzeichnis htdocs
und erstellen Sie eine einfache HTML-Datei. Schließlich verlassen Sie die Shell, um zum Host zurückzukehren:
Wenn Sie den Befehl curl localhost
erneut ausführen, zeigt der Webserver, dass er die Seite, die wir erstellt haben, zurückgibt.
Wir können nicht nur auf diese Datei vom Host zugreifen, sondern sie auch ändern:
Wenn Sie curl localhost
erneut ausführen, bestätigt dies, dass der Webserver die neueste von dem Host erstellte Seite bereitstellt.
Beenden Sie den Container mit dem folgenden Befehl. (Der -f
zwingt Docker, den Container ohne vorherige Stoppen zu beenden.)
Schritt 4 — Erstellen von Images
Neben dem Ausführen von vorhandenen Images aus dem Register können wir auch eigene Images erstellen und sie im Register speichern.
Sie können neue Images aus existierenden Containern erstellen. Die Änderungen, die am Container vorgenommen werden, werden zuerst commitiert, und dann werden die Images markiert und ins Register gepusht.
Lassen Sie uns den httpd
-Container noch einmal starten und die Standarddatei bearbeiten:
Der Container läuft nun mit einer angepassten index.html
. Sie können dies mit curl localhost
verifizieren.
Vor dem Committen des geänderten Containers ist es eine gute Idee, ihn anzustellen. Nach dem Stopp werden wir den Commit-Befehl ausführen:
Bestätigen Sie die Erstellung des Images mit dem docker images
-Befehl. Es zeigt das gerade von Ihnen erstellte doweb
-Image an.
Um dieses Image zu taggen und im Docker Hub zu speichern, führen Sie die folgenden Befehle aus, um Ihr Image in den öffentlichen Register zu pushen:
Sie können das neue Image durchsuchten, indem Sie im Browser oder über die Befehlszeile im Docker Hub suchen.
Schritt 5 — Starten eines privaten Registers
Es ist möglich, den Registrierungsdienst in privaten Umgebungen zu betreiben, um die Bilder sicherer zu halten und zwischen dem Docker-Engine und der Image-Repository Latenzzeiten zu reduzieren.
Der Docker-Registrierung ist als ein Container verfügbar, der wie jeder andere Container gestartet werden kann. Da der Registrierungsdienst mehrere Images enthält, ist es eine gute Idee, ihn mit einem Speichervolumen anzuhängen.
Beachten Sie, dass der Container mit dem Port 5000
exponiert wird und das registry
-Verzeichnis auf das Host-Dateisystem mapiert ist. Sie können über die Befehle docker ps
feststellen, ob der Container aktuell laufend ist.
Sie können nun einen lokalen Image taggen und es zum privaten Registry hochladen. Lassen Sie uns zunächst das busybox
-Container von Docker Hub herunterladen und taggen.
Die vorherige Befehlsausführung bestätigt, dass das busybox
-Container jetzt mit localhost:5000
taggt ist, so können Sie das Image nach dem privaten Registrierungsdienst hochladen.
Nachdem das Image ins lokale Register gehörig gemacht wurde, versuchen wir es aus dem Environment zu entfernen und es wieder vom Registrierungsdienst herunterzuladen.
Wir haben durch den vollen Kreislauf gehen, das Image herunterzuladen, es taggen, es ins lokale Register hochzuladen und schließlich wieder herunterzuladen.
Es könnte sein, dass Sie in einem dedizierten Host den privaten Registrierungsdienst betreiben möchten. Der Docker-Engine, der auf unterschiedlichen Maschinen läuft, wird sich mit dem Remote-Registery verbinden, um Bilder herunterzuladen und hochzuladen.
Da das Register nicht gesichert ist, müssen wir die Konfiguration des Docker-Engines anpassen, um den Zugriff auf ein unsicheres Register zu ermöglichen. Dazu editieren Sie die Datei daemon.json
, die sich unter /etc/docker/daemon.json
befindet. Erstellen Sie die Datei, falls sie nicht existiert.
Fügen Sie den folgenden Eintrag hinzu:
{
"insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}
Ersetzen Sie REMOTE_REGISTRY_HOST
durch den Hostnamen oder die IP-Adresse des entfernten Registers. Starten Sie den Docker-Engine neu, um sicherzustellen, dass die Konfigurationsänderungen angewendet werden.
##Fazit
Dieses Tutorial hat Ihnen den Einstieg in Docker erleichtert. Es deckte die wesentlichen Konzepte ab, einschließlich der Installation, der Verwaltung von Containern, der Verwaltung von Images, des Speichers und des privaten Registers. Die kommenden Sitzungen und Artikel in dieser Serie werden Ihnen helfen, über die Grundlagen von Docker hinauszukommen.
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-docker