Webinar-Reihe: Erste Schritte mit Containern

[.Hinweis]##

Dieser Artikel ergänzt awebinar series on deploying and managing containerized workloads in the cloud. Die Reihe deckt die wichtigsten Aspekte von Containern ab, einschließlich der Verwaltung des Container-Lebenszyklus, der Bereitstellung von Anwendungen mit mehreren Containern, der Skalierung von Arbeitslasten und des Verständnisses für Kubernetes. Außerdem werden Best Practices für die Ausführung von Stateful Applications vorgestellt.

Dieses Lernprogramm enthält die Konzepte und Befehle, die in der ersten Sitzung der Reihe Erste Schritte mit Containern behandelt wurden.

Einführung

Docker ist eine Plattform zum Bereitstellen und Verwalten von containerisierten Anwendungen. Container sind aufgrund ihrer Flexibilität bei Entwicklern, Administratoren und Entwicklern beliebt.

Docker besteht aus drei wesentlichen Komponenten:

  • Docker Engine

  • Docker-Tools

  • Docker Registry

Docker Engine bietet die wichtigsten Funktionen zum Verwalten von Containern. Es ist mit dem zugrunde liegenden Linux-Betriebssystem verbunden, um einfache APIs für den Lebenszyklus von Containern bereitzustellen.

Docker Tools sind eine Reihe von Befehlszeilentools, die mit der von der Docker Engine bereitgestellten API kommunizieren. Sie werden verwendet, um die Container auszuführen, neue Images zu erstellen, Speicher und Netzwerke zu konfigurieren und viele weitere Vorgänge auszuführen, die sich auf den Lebenszyklus eines Containers auswirken.

Docker Registry ist der Ort, an dem Containerbilder gespeichert werden. Jedes Bild kann mehrere Versionen haben, die durch eindeutige Tags identifiziert werden. Benutzer ziehen vorhandene Bilder aus der Registrierung und übertragen neue Bilder in die Registrierung. Docker Hub ist eine gehostete Registrierung, die vonDocker, Inc. verwaltet wird. Es ist auch möglich, eine Registrierung in Ihrer eigenen Umgebung auszuführen, um die Bilder näher an der Engine zu halten.

Am Ende dieses Lernprogramms haben Sie Docker auf einem DigitalOcean Droplet installiert, Container verwaltet, mit Bildern gearbeitet, Persistenz hinzugefügt und eine private Registrierung eingerichtet.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie:

Standardmäßig erfordert der BefehldockerRoot-Berechtigungen. Sie können den Befehl jedoch ohne das Präfixsudoausführen, indem Siedocker als Benutzer in der Gruppedockerausführen.

Führen Sie den Befehlsudo usermod -aG docker ${USER} aus, um Ihr Droplet auf diese Weise zu konfigurieren. Dadurch wird der aktuelle Benutzer zur Gruppedockerhinzugefügt. Führen Sie dann den Befehlsu - ${USER} aus, um die neue Gruppenmitgliedschaft anzuwenden.

In diesem Lernprogramm wird erwartet, dass Ihr Server so konfiguriert ist, dass der Befehldocker ohne das Präfixsudoausgeführt wird.

Schritt 1 - Docker installieren

Führen Sie nach dem Einfügen von SSH in das Droplet die folgenden Befehle aus, um alle vorhandenen Docker-bezogenen Pakete zu entfernen, die möglicherweise bereits installiert sind, und installieren Sie Docker dann aus dem offiziellen Repository:

sudo apt-get remove docker docker-engine docker.io
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

Überprüfen Sie nach der Installation von Docker die Installation mit den folgenden Befehlen:

docker info

Der obige Befehl zeigt die Details der Docker Engine an, die in der Umgebung bereitgestellt wurde. Mit dem nächsten Befehl wird überprüft, ob die Docker Tools ordnungsgemäß installiert und konfiguriert sind. Es sollte die Version von Docker Engine und Tools drucken.

docker version

Schritt 2 - Container starten

Docker-Container werden von vorhandenen Images gestartet, die in der Registrierung gespeichert sind. Bilder in Docker können in privaten oder öffentlichen Repositorys gespeichert werden. Private Repositorys erfordern, dass Benutzer sich authentifizieren, bevor sie Bilder abrufen. Auf öffentliche Bilder kann jeder zugreifen.

Führen Sie den folgenden Befehl aus, um nach einem Bild mit dem Namenhello-world zu suchen:

docker search hello-world

Es können mehrere Bilder vorhanden sein, die dem Namenhello-world entsprechen. Wählen Sie die mit den maximalen Sternen, die die Popularität des Bildes anzeigt.

Überprüfen Sie die verfügbaren Bilder in Ihrer lokalen Umgebung mit dem folgenden Befehl:

docker images

Da wir noch keine Container gestartet haben, werden keine Bilder angezeigt. Wir können das Image jetzt herunterladen und lokal ausführen:

docker pull hello-world
docker run hello-world

Wenn wir den Befehldocker run ausführen, ohne das Image zu ziehen, zieht Docker Engine zuerst das Image und führt es dann aus. Wenn Sie den Befehldocker images erneut ausführen, wird angezeigt, dass das Image vonhello-worldlokal verfügbar ist.

Starten wir einen aussagekräftigeren Container: einen Apache-Webserver.

docker run -p 80:80 --name web -d httpd

Möglicherweise stellen Sie fest, dass zusätzliche Optionen an den Befehldocker runübergeben wurden. Hier ist eine Erklärung dieser Schalter:

  • -p - Hiermit wird Docker Engine angewiesen, den Port80 des Containers auf dem Port80 des Hosts verfügbar zu machen. Da Apache Port80 überwacht, müssen wir ihn auf dem Host-Port verfügbar machen.

  • --name - Dieser Schalter weist unserem laufenden Container einen Namen zu. Wenn wir dies nicht angeben, weist Docker Engine einen zufälligen Namen zu.

  • -d - Diese Option weist Docker Engine an, den Container im getrennten Modus auszuführen. Andernfalls wird der Container im Vordergrund gestartet und blockiert den Zugriff auf die Shell. Indem Sie den Container in den Hintergrund schieben, können Sie die Shell weiterhin verwenden, während der Container noch ausgeführt wird.

Führen Sie den folgenden Befehl aus, um zu überprüfen, ob unser Container tatsächlich im Hintergrund ausgeführt wird:

docker ps

Die Ausgabe zeigt, dass der Container mit dem Namenweb ausgeführt wird, wobei Port80 dem Host-Port80 zugeordnet ist.

Greifen Sie jetzt auf den Webserver zu:

curl localhost

Stoppen Sie den laufenden Container und entfernen Sie ihn mit den folgenden Befehlen:

docker stop web
docker rm web

Durch erneutes Ausführen vondocker ps wird bestätigt, dass der Container beendet wurde.

Schritt 3 - Hinzufügen von Speicher zu Containern

Container sind kurzlebig, 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 beizubehalten, müssen wir dem Container ein Volume hinzufügen. Volumes sind Verzeichnisse aus dem Host-Dateisystem.

Erstellen Sie zunächst ein neues Verzeichnis auf dem Host:

mkdir htdocs

Starten Sie nun den Container mit einem neuen Schalter, um das Verzeichnishtdocsbereitzustellen, und verweisen Sie auf das Dokumentstammverzeichnis des Apache-Webservers:

docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd

Der Schalter-v verweist das Verzeichnishtdocsim Container auf das Dateisystem des Hosts. Alle an diesem Verzeichnis vorgenommenen Änderungen werden an beiden Speicherorten angezeigt.

Greifen Sie vom Container aus auf das Verzeichnis zu, indem Sie den folgenden Befehl ausführen:

docker exec -it web /bin/bash

Dieser Befehl verbindet unser Terminal in einem interaktiven Modus mit der Shell der Container. Sie sollten sehen, dass Sie jetzt in den Behälter fallen gelassen werden.

Navigieren Sie zum Ordnerhtdocsund erstellen Sie eine einfache HTML-Datei. Beenden Sie schließlich die Shell, um zum Host zurückzukehren:

cd /usr/local/apache2/htdocs
echo '

Hello World from Container

' > index.html exit

Wenn Sie den Befehlcurl localhost erneut ausführen, wird angezeigt, dass der Webserver die von uns erstellte Seite zurückgibt.

Wir können nicht nur vom Host auf diese Datei zugreifen, sondern sie auch ändern:

cd htdocs
cat index.html
echo '

Hello World from Host

' | sudo tee index.html >/dev/null

Durch erneutes Ausführen voncurl localhost wird bestätigt, dass der Webserver die zuletzt vom Host erstellte Seite bereitstellt.

Beenden Sie den Container mit dem folgenden Befehl. (Die-f zwingen Docker zum Beenden, ohne vorher anzuhalten.)

docker rm -f web

Schritt 4 - Erstellen von Bildern

Abgesehen davon, dass vorhandene Bilder aus der Registrierung ausgeführt werden, können wir eigene Bilder erstellen und in der Registrierung speichern.

Sie können neue Bilder aus vorhandenen Containern erstellen. Die am Container vorgenommenen Änderungen werden zuerst festgeschrieben, und dann werden die Bilder markiert und in die Registrierung übertragen.

Starten Sie den Containerhttpderneut und ändern Sie das Standarddokument:

docker run -p 80:80 --name web -d httpd
docker exec -it web /bin/bash
cd htdocs
echo '

Welcome to my Web Application

' > index.html exit

Der Container wird jetzt mit einem benutzerdefiniertenindex.html ausgeführt. Sie können dies mitcurl localhost überprüfen.

Bevor wir den geänderten Container übergeben, sollten Sie ihn stoppen. Nach dem Stoppen führen wir den Commit-Befehl aus:

docker stop web
docker commit web doweb

Bestätigen Sie die Erstellung des Bildes mit dem Befehldocker images. Es zeigt das Bild vondoweb, das wir gerade erstellt haben.

Führen Sie die folgenden Befehle aus, um dieses Bild in Docker Hub zu kennzeichnen und zu speichern und es in die öffentliche Registrierung zu verschieben:

docker login
docker tag your_docker_hub_username/doweb
docker push your_docker_hub_username/doweb

Sie können das neue Image überprüfen, indem Sie in Docker Hub über den Browser oder die Befehlszeile suchen.

Schritt 5 - Starten einer privaten Registrierung

Es ist möglich, die Registrierung in privaten Umgebungen auszuführen, um die Abbilder sicherer zu machen. Außerdem wird die Wartezeit zwischen Docker Engine und Image-Repository verringert.

Docker Registry ist als Container verfügbar, der wie jeder andere Container gestartet werden kann. Da in der Registrierung mehrere Bilder gespeichert sind, empfiehlt es sich, ein Speichervolume daran anzuhängen.

docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry

Beachten Sie, dass der Container im Hintergrund gestartet wird, wobei Port5000 offengelegt und das Verzeichnisregistry dem Host-Dateisystem zugeordnet ist. Sie können überprüfen, ob der Container ausgeführt wird, indem Sie den Befehldocker psausführen.

Wir können jetzt ein lokales Image taggen und es in die private Registry übertragen. Ziehen wir zuerst den Containerbusyboxaus Docker Hub und markieren ihn.

docker pull busybox
docker tag busybox localhost:5000/busybox
docker images

Der vorherige Befehl bestätigt, dass der Containerbusybox jetzt mitlocalhost:5000 gekennzeichnet ist. Verschieben Sie das Image daher in die private Registrierung.

docker push localhost:5000/busybox

Nachdem das Image in die lokale Registrierung verschoben wurde, versuchen wir, es aus der Umgebung zu entfernen und wieder aus der Registrierung zu entfernen.

docker rmi -f localhost:5000/busybox
docker images
docker pull localhost:5000/busybox
docker images

Wir haben den gesamten Kreis durchlaufen, indem wir das Image gezogen, markiert, in die lokale Registrierung verschoben und schließlich zurückgezogen haben.

Es kann Fälle geben, in denen Sie die private Registrierung auf einem dedizierten Host ausführen möchten. Die Docker Engine, die auf verschiedenen Computern ausgeführt wird, kommuniziert mit der Remote-Registrierung, um Bilder abzurufen und zu übertragen.

Da die Registrierung nicht gesichert ist, müssen wir die Konfiguration von Docker Engine ändern, um den Zugriff auf eine unsichere Registrierung zu ermöglichen. Bearbeiten Sie dazu die Dateidaemon.json unter/etc/docker/daemon.json. Erstellen Sie die Datei, falls sie nicht vorhanden ist.

Fügen Sie den folgenden Eintrag hinzu:

Bearbeiten von /etc/docker/daemon.json

{
  "insecure-registries" : ["REMOTE_REGISTRY_HOST:5000"]
}

Ersetzen SieREMOTE_REGISTRY_HOST durch den Hostnamen oder die IP-Adresse der Remote-Registrierung. Starten Sie Docker Engine neu, um sicherzustellen, dass die Konfigurationsänderungen übernommen werden.

Fazit

Dieses Tutorial hat Ihnen den Einstieg in Docker erleichtert. Es umfasste die wesentlichen Konzepte einschließlich Installation, Containerverwaltung, Image-Verwaltung, Speicherung und privater Registrierung. Die kommenden Sitzungen und Artikelin this series helfen Ihnen dabei, über die Grundlagen von Docker hinauszugehen.