Bereitstellen und Verwalten von Remote - Docker - Hosts mit Docker Machine unter CentOS 7

Einführung

Docker Machine ist ein Tool, mit dem Sie mehrere Docker-Hosts bequem von Ihrem PC aus bereitstellen und verwalten können. Solche Server werden im Allgemeinen als Docker-Hosts bezeichnet und können selbstverständlich zum Ausführen von Docker-Containern verwendet werden.

Während Docker Machine auf einem lokalen oder einem Remote-System installiert werden kann, besteht der häufigste Ansatz darin, es auf Ihrem lokalen Computer (systemeigene Installation oder virtuelle Maschine) zu installieren und es zur Bereitstellung von Docker-Remote-Servern zu verwenden.

Obwohl Docker Machine unter den meisten Linux-Distributionen sowie unter Mac OS X und Windows installiert werden kann, wird es in diesem Lernprogramm auf Ihrem lokalen Computer mit CentOS 7 installiert und zur Bereitstellung von Dockerized DigitalOcean Droplets verwendet.

Voraussetzungen

Um diesem Tutorial zu folgen, benötigen Sie Folgendes:

  • Ein lokaler Computer, auf dem CentOS 7 mit installiertem Docker ausgeführt wird. (Anweisungen finden Sie unterHow To Install and Use Docker on CentOS 7)

  • Ein DigitalOcean-API-Token. Wenn Sie noch keine haben, generieren Sie diese mitthis guide. Stellen Sie beim Generieren eines Tokens sicher, dass es über einen Lese- / Schreibbereich verfügt. Dies ist die Standardeinstellung. Wenn Sie also beim Generieren keine Option ändern, verfügt diese über Lese- und Schreibfunktionen. Um die Verwendung in der Befehlszeile zu vereinfachen, müssen Sie das Token einer in diesem Artikel angegebenen Variablen zuweisen.

[[Schritt 1 - Installieren der Docker-Maschine auf Ihrem lokalen Computer]] == Schritt 1 - Installieren der Docker-Maschine auf Ihrem lokalen Computer

In diesem Schritt werden wir die Installation von Docker Machine auf Ihrem lokalen Computer mit CentOS 7 durchführen.

Geben Sie Folgendes ein, um die Binärdatei herunterzuladen und zu installieren:

wget https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-$(uname -s)-$(uname -m)

Der Name der Datei solltedocker-machine-Linux-x86_64 sein. Benennen Sie es indocker-machine um, um die Arbeit zu vereinfachen:

mv docker-machine-Linux-x86_64 docker-machine

Mach es ausführbar:

chmod +x docker-machine

Verschieben oder kopieren Sie es in das Verzeichnisusr/local/bin, damit es als Systembefehl verfügbar ist.

sudo mv docker-machine /usr/local/bin

Überprüfen Sie die Version, die anzeigt, dass sie richtig installiert ist:

docker-machine version

Die Ausgabe sollte ähnlich sein

Outputdocker-machine version 0.14.0, build 89b8332

[[Schritt-2 - Installieren von zusätzlichen Docker-Maschinenskripten]] == Schritt 2 - Installieren zusätzlicher Docker-Maschinenskripte

Das DockH Machine GitHub-Repository enthält drei Bash-Skripte, die die Verwendung der Befehledocker unddocker-machineerleichtern sollen. Sie ermöglichen die Vervollständigung von Befehlen und die Anpassung der Bash-Eingabeaufforderung.

In diesem Schritt installieren wir die drei Skripts auf Ihrem lokalen Computer. Sie werden heruntergeladen und im Verzeichnis/etc/bash_completion.dinstalliert.

Das erste Skript ermöglicht es, den aktiven Computer in Ihrer Bash-Eingabeaufforderung anzuzeigen. Dies ist praktisch, wenn Sie mit mehreren Docker-Geräten arbeiten und zwischen diesen wechseln. Das Skript heißtdocker-machine-prompt.bash. Geben Sie zum Herunterladen Folgendes ein:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-prompt.bash -O /etc/bash_completion.d/docker-machine-prompt.bash

Um die Installation der obigen Datei abzuschließen, müssen Sie einen benutzerdefinierten Wert für die VariablePS1in Ihrer Datei.bashrcfestlegen. Öffnen Sie es also mitnano (PS1 ist eine spezielle Shell-Variable, mit der die Bash-Eingabeaufforderung geändert wird):

nano ~/.bashrc

Kopieren Sie die folgende Zeile und fügen Sie sie am Ende der Datei ein:

~/.bashrc

export PS1='[\u@\h \W$(__docker_machine_ps1 " [%s]")]\$ '

Mit dieser Änderung an der Datei~/.bashrcwird beim Aktivieren eines Computers dessen Name in die Shell-Eingabeaufforderung eingefügt.

Speichern und schließen Sie die Datei.

Das zweite Skript heißtdocker-machine-wrapper.bash. Es fügt dem Befehldocker-machineeinen Unterbefehluse hinzu, wodurch das Wechseln zwischen angedockten Maschinen vereinfacht wird. Geben Sie zum Herunterladen Folgendes ein

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine-wrapper.bash -O /etc/bash_completion.d/docker-machine-wrapper.bash

Das dritte Skript heißtdocker-machine.bash. Es fügt die Bash-Vervollständigung fürdocker-machine Befehle hinzu. Laden Sie es herunter mit:

sudo wget https://raw.githubusercontent.com/docker/machine/master/contrib/completion/bash/docker-machine.bash -O /etc/bash_completion.d/docker-machine.bash

Schließen Sie das Terminal und öffnen Sie es erneut, um die bisherigen Änderungen zu übernehmen. Wenn Sie über SSH am Computer angemeldet sind, beenden Sie die Sitzung und melden Sie sich erneut an. Die Befehlsvervollständigung für die Befehledocker unddocker-machine sollte jetzt funktionieren. Wenn es nicht funktioniert, ist das Paketbash-completionwahrscheinlich nicht installiert. Wenn dies der Fall ist, installieren Sie es mit:

sudo yum install bash-completion

Das sollte es beheben.

[[Schritt 3 - Bereitstellen eines Docker-Hosts mit Docker-Maschine]] == Schritt 3 - Bereitstellen eines Docker-Hosts mit Docker-Maschine

Nachdem Docker und Docker Machine auf Ihrem lokalen Computer ausgeführt werden, können Sie jetzt mit dem Befehldocker-machine createvon Docker Machine ein Dockerized Droplet auf Ihrem DigitalOcean-Konto bereitstellen. Wenn Sie dies noch nicht getan haben, weisen Sie Ihr DigitalOcean-API-Token einer Bash-Variablen zu, indem Sie Folgendes verwenden:

export shell-variable=your-api-token

NOTE: This tutorial uses [.highlight]#DOTOKEN als Bash-Variable für das DO-API-Token. Der Variablenname muss nicht DOTOKEN sein, und er muss nicht in Großbuchstaben angegeben werden.
#

Um die Variable dauerhaft zu machen, fügen Sie sie in die Datei~/.bashrcein. Dieser Schritt ist optional. Er ist jedoch erforderlich, wenn der Wert für alle Terminalsitzungen beibehalten werden soll.

nano ~/.bashrc

Fügen Sie an einer beliebigen Stelle eine ähnliche Zeile hinzu:

~/.bashrcexport DOTOKEN=your-api-token

Geben Sie Folgendes ein, um die Variable in der aktuellen Terminalsitzung zu aktivieren:

source ~/.bashrc

Um den Befehldocker-machine create erfolgreich aufzurufen, müssen Sie (mindestens) den Treiber, das API-Token (oder die Variable, die ihn auswertet) und einen eindeutigen Namen für den Remote-Host angeben. Geben Sie Folgendes ein, um Ihren ersten Dockerized-Host zu erstellen:

docker-machine create --driver digitalocean --digitalocean-access-token $DOTOKEN machine-name

Es folgt eine Teilausgabe, während der Host erstellt wird. In dieser Ausgabe lautet der Name des Hostscentos-docker:

Output
 ...

Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker i up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env centos-docker

Für den neuen Host wird ein SSH-Schlüsselpaar erstellt, damitdocker-machine remote darauf zugreifen kann. Das Droplet wird mit dem gewünschten Betriebssystem bereitgestellt, und Docker ist auf dem System installiert. Wenn der Befehl abgeschlossen ist, ist Ihr Docker Droplet betriebsbereit.

Geben Sie Folgendes ein, um den neu erstellten Host über die Befehlszeile anzuzeigen:

docker-machine ls

Die Ausgabe sollte ungefähr so ​​aussehen:

OutputNAME                ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER    ERRORS
centos-docker   -        digitalocean   Running   tcp://203.0.113.71:2376            v18.05.0-ce

[[Schritt 4 - Geben Sie das Basis-Betriebssystem beim Erstellen eines Docker-Hosts an]] == Schritt 4 - Geben Sie das Basis-Betriebssystem beim Erstellen eines Docker-Hosts an

In diesem Schritt erfahren Sie, wie Sie ein Basisbetriebssystem und eine Version für den Dockerized Host angeben, der mit dem Flag--digitalocean-imageerstellt wird.

Um beispielsweise einen Docker-Host mit CentOS 7 zu erstellen, geben Sie Folgendes ein:

docker-machine create --driver digitalocean --digitalocean-image centos-7-x64 --digitalocean-access-token $DOTOKEN machine-name

Was ist, wenn Sie Debian 8 auf Ihrem Server ausführen möchten? Sie würden den folgenden Befehl eingeben:

docker-machine create --driver digitalocean --digitalocean-image debian-8-x64 --digitalocean-access-token $DOTOKEN machine-name

Standardmäßig ist das Basisbetriebssystem, das beim Erstellen eines Docker-Hosts mit Docker Machine verwendet wird,supposed, um die neueste Version (oder die neueste LTS-Version für Ubuntu) zu sein. Zum Zeitpunkt dieser Veröffentlichung verwendet der Befehldocker-machine createjedoch weiterhin Ubuntu 16.04 LTS als Basisbetriebssystem, obwohl Ubuntu 18.04 die neueste LTS-Edition ist. Wenn Sie also Ubuntu 18.04 ausführen müssen, müssen Sie Ubuntu zusammen mit der gewünschten Version angeben, indem Sie das Flag--digitalocean-image an den Befehldocker-machine create übergeben:

docker-machine create --driver digitalocean --digitalocean-image ubuntu-18-04-x64 --digitalocean-access-token $DOTOKEN machine-name

Das Basisbetriebssystem ist nicht die einzige Wahl, die Sie haben. Sie können auch die Größe des Tropfens angeben. Standardmäßig ist es das kleinste Droplet mit 1 GB RAM, einer einzelnen CPU und einer 25-GB-SSD.

Finden Sie die Größe des Tröpfchens, das Sie verwenden möchten, indem Sie den entsprechenden Butzen inDigitalOcean API documentation nachschlagen.

Verwenden Sie beispielsweise den Slugs-2vcpu-2gb, um einen Computer mit 2 GB RAM, zwei CPUs und einer SSD mit 60 GB bereitzustellen:

docker-machine create --driver digitalocean --digitalocean-size s-2vcpu-2gb --digitalocean-access-token $DOTOKEN machine-name

Geben Sie Folgendes ein, um alle Flags anzuzeigen, die für das Erstellen eines Docker-Computers mit dem DigitalOcean-Treiber spezifisch sind:

docker-machine create --driver digitalocean -h

[.tip] #Tip: Wenn Sie die Droplet-Seite Ihres DigitalOcean-Dashboards aktualisieren, sollten die neuen Hosts angezeigt werden, die Sie mit dem Befehldocker-machine erstellt haben.
#

[[Schritt 5 - Ausführen anderer Docker-Maschinenbefehle]] == Schritt 5 - Ausführen anderer Docker-Maschinenbefehle

Sie haben gesehen, wie Sie einen Docker-Host mit dem Unterbefehlcreatebereitstellen. Sie haben auch gesehen, wie Sie die für Docker Machine verfügbaren Hosts mit dem Unterbefehllsauflisten. In diesem Schritt lernen Sie einige weitere Unterbefehle vondocker-machinekennen.

Verwenden Sie den Unterbefehlinspectwie folgt, um detaillierte Informationen zu einem Docker-Host zu erhalten:

docker-machine inspect machine-name

Die Ausgabe sollte solche Zeilen enthalten. Die ZeileImagezeigt die Version der verwendeten Linux-Distribution an:

Output{
    "ConfigVersion": 3,
    "Driver": {
        "IPAddress": "203.0.113.71",
        "MachineName": "centos-docker",
        "SSHUser": "root",
        "SSHPort": 22,
        ...
        "Image": "centos-7-0-x64",
        "Size": "s-1vcpu-1gb",
        ...
    },

---

Geben Sie Folgendes ein, um die Verbindungskonfiguration für einen Host zu drucken:

docker-machine config machine-name

Die Ausgabe sollte ungefähr so ​​aussehen:

Output--tlsverify
--tlscacert="/home/kamit/.docker/machine/certs/ca.pem"
--tlscert="/home/kamit/.docker/machine/certs/cert.pem"
--tlskey="/home/kamit/.docker/machine/certs/key.pem"
-H=tcp://203.0.113.71:2376

Die letzte Zeile in der Ausgabe des Befehlsdocker-machine config zeigt die IP-Adresse des Hosts an. Sie können diese Informationen jedoch auch erhalten, indem Sie Folgendes eingeben:

docker-machine ip machine-name

Wenn Sie einen Remote-Host ausschalten müssen, können Sie ihn mitdocker-machine stoppen:

docker-machine stop machine-name

Stellen Sie sicher, dass es gestoppt ist.

docker-machine ls

Der Status des Hosts hat sich geändert:

OuputNAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker                  digitalocean   Timeout

Um es erneut zu starten:

docker-machine start machine-name

Stellen Sie sicher, dass es gestartet ist:

docker-machine ls

Sie werden sehen, dassSTATE jetztRunning für den Host festgelegt ist:

OuputNAME                 ACTIVE   DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS

centos-docker         -        digitalocean   Running    tcp://203.0.113.71:2376            v18.05.0-ce

Zum Schluss, wenn Sie einen Host entfernen möchten:

docker-machine rm machine-name

[[Schritt 6 - Ausführen von Befehlen auf einem Docker-Host über SSH] == Schritt 6 - Ausführen von Befehlen auf einem Docker-Host über SSH

Zu diesem Zeitpunkt haben Sie Informationen zu Ihren Hosts erhalten, aber Sie können noch mehr tun. Beispielsweise können Sie native Linux-Befehle auf einem Docker-Host ausführen, indem Sie den Unterbefehlssh vondocker-machine von Ihrem lokalen System verwenden. In diesem Abschnitt wird erläutert, wie Siessh-Befehle überdocker-machine ausführen und eine SSH-Sitzung für einen Docker-Host öffnen.

Angenommen, Sie haben einen Host mit CentOS als Betriebssystem bereitgestellt, führen Sie auf Ihrem lokalen System den folgenden Befehl aus, um die Pakete auf dem Docker-Host zu aktualisieren:

docker-machine ssh machine-name yum update

Sie sind nicht sicher, welchen Kernel Ihr Remote-Docker-Host verwendet? Geben Sie Folgendes ein:

docker-machine ssh machine-name uname -r

Neben der Verwendung des Unterbefehlsssh zum Ausführen von Befehlen auf dem Remote-Docker-Host können Sie ihn auch zum Anmelden beim Dockerized-Host selbst verwenden. So einfach geht's:

docker-machine ssh machine-name

Ihre Eingabeaufforderung ändert sich, um die Tatsache widerzuspiegeln, dass Sie am Remote-Host angemeldet sind:

root@machine-name#

Geben Sie Folgendes ein, um den Remotehost zu beenden:

exit

[[Schritt 7 - Aktivieren eines Docker-Hosts]] == Schritt 7 - Aktivieren eines Docker-Hosts

Durch Aktivieren eines Docker-Hosts wird Ihr lokaler Docker-Client mit diesem System verbunden, sodass normaledocker-Befehle auf dem Remote-System ausgeführt werden können. Geben Sie den folgenden Befehl ein, um einen Docker-Host zu aktivieren:

eval $(docker-machine env machine-name)

Alternativ können Sie es mit dem folgenden Befehl aktivieren:

docker-machine use machine-name

[.tip] #Tip Wenn Sie mit mehreren Docker-Hosts arbeiten, ist der Befehldocker-machine use die einfachste Methode, um von einem zum anderen zu wechseln.
#

Nachdem Sie einen der obigen Befehle eingegeben haben, sollte sich Ihre Bash-Eingabeaufforderung ändern, um anzuzeigen, dass Ihr Docker-Client auf den Remote-Docker-Host verweist. Es wird diese Form annehmen. Der Name des Hosts steht am Ende der Eingabeaufforderung:

username@localmachine:~ [machine-name]$

Jetzt wird jederdocker-Befehl, den Sie an dieser Eingabeaufforderung eingeben, auf diesem Remote-Host ausgeführt.

Wenn auf dem Terminal, auf dem der Befehldocker-machine lsausgeführt wird, ein Host aktiv ist, zeigt das Sternchen in der SpalteACTIVE an, dass es sich um den aktiven handelt.

Output NAME         ACTIVE            DRIVER         STATE     URL                        SWARM   DOCKER    ERRORS
centos-docker   *        digitalocean   Running    tcp://203.0.113.71:2376            v18.05.0-ce

[.note] #NOTE: Wenn ein Host aktiv ist, wird jederdocker-Befehl, den Sie auf dem von Ihnen verwendeten Terminal eingeben, auf dem Remote-Host ausgeführt. Alle normalen Linux-Befehle werden jedoch auf dem lokalen Computer ausgeführt.
#

Geben Sie Folgendes ein, um den Remote-Docker-Host zu beenden:

docker-machine use -u

Sie kehren zur Eingabeaufforderung für Ihr lokales System zurück.

Jetzt erstellen wir Container auf dem Remote-Computer.

[[Schritt-8 - Erstellen von Docker-Containern auf einem Remote-Docker-Host]] == Schritt 8 - Erstellen von Docker-Containern auf einem Remote-Docker-Host

Bisher haben Sie ein Dockerized Droplet in Ihrem DigitalOcean-Konto bereitgestellt und es aktiviert - das heißt, Ihr Docker-Client zeigt darauf. Der nächste logische Schritt ist das Hochfahren von Containern. Lassen Sie uns als Beispiel versuchen, den offiziellen Nginx-Container auszuführen.

Verwenden Siedocker-machine use, um Ihren Remote-Computer auszuwählen:

docker-machine use machine-name

Führen Sie nun diesen Befehl aus, um einen Nginx-Container auf diesem Computer auszuführen:

docker run -d -p 8080:80 --name httpserver nginx

In diesem Befehl ordnen wir Port80 im Nginx-Container Port8080 auf dem Dockerized-Host zu, sodass wir von überall auf die Standard-Nginx-Seite zugreifen können.

Wenn der Befehl erfolgreich ausgeführt wurde, können Sie auf die Standard-Nginx-Seite zugreifen, indem Sie Ihren Webbrowser aufhttp://docker_machine_ip:8080 richten.

Solange der Docker-Host noch aktiviert ist (wie an seinem Namen in der Eingabeaufforderung zu erkennen ist), sollten Sie in der Lage sein, die Bilder auf diesem Host aufzulisten:

docker images

Die Ausgabe sollte das gerade verwendete Nginx-Image sowie andere zuvor heruntergeladene enthalten:

OutputREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              ae513a47849c        3 weeks ago         109MB

Sie können auch die aktiven oder ausgeführten Container auf dem Host auflisten:

docker ps

Wenn der in diesem Schritt ausgeführte Nginx-Container der einzige aktive Container ist, sollte die Ausgabe folgendermaßen aussehen:

OutputCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4284f9d25548        nginx               "nginx -g 'daemon of…"   20 minutes ago      Up 20 minutes       0.0.0.0:8080->80/tcp   httpserver

Geben Sieexit ein, um die Eingabeaufforderung für den Remote-Host zu beenden. Dadurch wird auch das Terminal geschlossen:

exit

[.tip] #Tip: Wenn Sie Container auf einem Remote-Host erstellen möchten, zeigt Ihr Docker-Clientmustdarauf - das heißt, es muss der aktive Host in dem Terminal sein, das Sie sind mit. Andernfalls erstellen Sie den Container auf Ihrem lokalen Computer. Lassen Sie sich von Ihrer Eingabeaufforderung leiten.
#

[[Schritt-9 - Deaktivieren der Absturzberichterstattung - optional]] == Schritt 9 - Deaktivieren der Absturzberichterstattung (optional)

Wenn ein Versuch, einen Dockerized-Host mit Docker Machine bereitzustellen, fehlschlägt oder Docker Machine abstürzt, werden standardmäßig einige Diagnoseinformationen automatisch an ein Docker-Konto bei Bugsnag gesendet. Wenn Sie damit nicht vertraut sind, können Sie die Berichterstellung deaktivieren, indem Sie eine leere Datei mit dem Namenno-error-report im Verzeichnis.docker/machineIhrer Installation erstellen.

Geben Sie dazu einfach Folgendes ein:

touch ~/.docker/machine/no-error-report

Überprüfen Sie die Datei auf Fehlermeldungen, wenn die Bereitstellung fehlschlägt oder Docker Machine abstürzt.

Fazit

Dies war eine Einführung in die Installation und Verwendung von Docker Machine, um mehrere Docker Droplets von einem lokalen System aus bereitzustellen. Jetzt sollten Sie in der Lage sein, schnell so viele Dockerized-Hosts in Ihrem DigitalOcean-Konto bereitzustellen, wie Sie benötigen.

Weitere Informationen zu Docker-Maschinen finden Sie unterofficial documentation page. Die drei in diesem Tutorial heruntergeladenen Bash-Skripte werden aufthis GitHub page gehostet.