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-machine
erleichtern 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.d
installiert.
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 VariablePS1
in Ihrer Datei.bashrc
festlegen. Ö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~/.bashrc
wird 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-machine
einen 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-completion
wahrscheinlich 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 create
von 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~/.bashrc
ein. 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-image
erstellt 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 create
jedoch 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 Unterbefehlcreate
bereitstellen. Sie haben auch gesehen, wie Sie die für Docker Machine verfügbaren Hosts mit dem Unterbefehlls
auflisten. In diesem Schritt lernen Sie einige weitere Unterbefehle vondocker-machine
kennen.
Verwenden Sie den Unterbefehlinspect
wie 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 ls
ausgefü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/machine
Ihrer 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.