[.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:
-
Ein Ubuntu 16.04-Droplet wurde eingerichtet, indem dieseUbuntu 16.04 initial server setup tutorial befolgt wurden, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.
-
ADocker Hub account. This overview of Docker Hub hilft Ihnen beim Einstieg.
Standardmäßig erfordert der Befehldocker
Root-Berechtigungen. Sie können den Befehl jedoch ohne das Präfixsudo
ausfü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 Gruppedocker
hinzugefü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äfixsudo
ausgefü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-world
lokal 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 Verzeichnishtdocs
bereitzustellen, 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 Verzeichnishtdocs
im 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 Ordnerhtdocs
und 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 Containerhttpd
erneut 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 ps
ausführen.
Wir können jetzt ein lokales Image taggen und es in die private Registry übertragen. Ziehen wir zuerst den Containerbusybox
aus 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.