So erstellen Sie ein Docker -Bild mit einer Dockerfile
- 4710
- 1080
- Janin Pletsch
Docker -Fähigkeiten sind hauptsächlich, hauptsächlich, weil dank der Docker
Wir können die Bereitstellung von Anwendungen in so genannten sogenannten automatisieren Behälter
, Erstellen maßgeschneiderter Umgebungen, die überall hinweg leicht repliziert werden können Docker
Technologie wird unterstützt. In diesem Tutorial werden wir sehen, wie man a erstellt Docker -Bild
Von Grund auf neu verwenden, verwenden Sie a Dockerfile
. Wir werden die wichtigsten Anweisungen lernen, mit denen wir unser Bild anpassen können, wie man das Bild erstellt und wie man Container basierend darauf ausführt.
In diesem Tutorial lernen Sie:
- So erstellen Sie ein Docker -Bild mit einer Dockerfile
- Einige der am häufigsten verwendeten Dockerfile -Anweisungen
- Wie man Datendauer in Containern erreicht
Softwareanforderungen und Konventionen verwendet
Kategorie | Anforderungen, Konventionen oder Softwareversion verwendet |
---|---|
System | OS-unabhängig |
Software | Docker |
Andere |
|
Konventionen | # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können |
Bilder und Behälter
Bevor wir beginnen, kann es nützlich sein, klar zu definieren, was wir meinen, wenn wir darüber sprechen Bilder
Und Behälter
im Zusammenhang mit Docker
. Bilder können als Bausteine der Docker -Welt angesehen werden. Sie repräsentieren die „Blaupausen“, die zum Erstellen von Containern verwendet werden. Wenn ein Container erstellt wird, ist er eine konkrete Instanz der Bilder, auf denen er basiert.
Viele Container können aus demselben Bild erstellt werden. Im Rest dieses Artikels lernen wir, wie Sie die Anweisungen zur Verfügung stellen, um ein Bild zu erstellen, das auf unsere Bedürfnisse in einem zugeschnitten ist Dockerfile
, So erstellen Sie das Bild tatsächlich und wie Sie einen Container basierend darauf ausführen.
Erstellen Sie unser eigenes Bild mit einer Dockerfile
Um unser eigenes Bild zu erstellen, werden wir a verwenden Dockerfile.
Eine Dockerfile enthält alle Anweisungen, die zum Erstellen und Einrichten eines Bildes erforderlich sind. Sobald unsere Dockerfile fertig ist Docker Build
Befehl, das Bild tatsächlich zu erstellen.
Das erste, was wir tun sollten, ist, ein neues Verzeichnis zu erstellen, um unser Projekt zu hosten. Für dieses Tutorial werden wir ein Bild erstellen, das das enthält Apache
Webserver, sodass wir das Stammverzeichnis des Projekts „Dockerized-Apache“ nennen:
$ mkdir dockerized-Apache
Dieses Verzeichnis nennen wir das Kontext aufbauen
. Während des Erstellungsprozesses haben alle darin enthaltenen Dateien und Verzeichnisse, einschließlich des Dockerfile
Wir werden erstellen, werden an den Docker -Daemon gesendet, damit sie leicht zugreifen können, es sei denn, sie sind in die aufgeführt .Docking
Datei.
Lassen Sie uns unsere erstellen Dockerfile
. Die Datei muss aufgerufen werden Dockerfile
und enthält, wie oben erwähnt, alle Anweisungen, um ein Bild mit den gewünschten Merkmalen zu erstellen. Wir starten unseren bevorzugten Texteditor und schreiben zunächst die folgenden Anweisungen:
Von Ubuntu: 18.10 label sorter = "[email protected] "
Kopieren Die erste Anweisung, die wir angeben müssen, ist AUS
: damit können wir ein vorhandenes Bild angeben, das wir als Basis verwenden werden (dies wird a genannt Basisbild
), um unsere eigenen zu schaffen. In diesem Fall wird unser Grundbild sein Ubuntu
. Neben dem Bildnamen haben wir auch ein Tag verwendet, um die Version des Bildes anzugeben, das wir verwenden möchten, in diesem Fall 18.10
. Wenn kein Tag angegeben ist neueste
Das Tag wird standardmäßig verwendet: Dies führt dazu, dass die neueste verfügbare Version des Basisbildes verwendet wird. Wenn das Bild in unserem System noch nicht vorhanden ist, wird es von DockerHub heruntergeladen.
Nach dem AUS
Anweisung, wir haben verwendet ETIKETT
. Diese Anweisung ist optional, kann mehrmals wiederholt werden und wird verwendet, um unserem Bild Metadaten hinzuzufügen. In diesem Fall haben wir es verwendet, um den Bildbetrieb anzugeben.
Die Laufanweisung
Zu diesem Zeitpunkt, wenn wir rennen Docker Build
, Wir werden nur ein Bild produzieren, das mit der Basis identisch ist, mit Ausnahme der Metadaten, die wir hinzugefügt haben. Dies wäre für uns keinen Nutzen. Wir sagten, wir wollen die "docken" Apache
Webserver, also als nächstes in unserem Dockerfile
, soll eine Anweisung zur Installation des Webservers als Teil des Bildes angeben. Die Anweisung, die uns diese Aufgabe erfüllen lässt LAUFEN
:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-Get-Update && apt-Get -y install apache2
Kopieren Der LAUFEN
Der Befehl wird verwendet, um Befehle oben auf dem Bild auszuführen. Eine sehr wichtige Sache, an die man sich erinnern muss, ist das für jeden LAUFEN
Anweisung, die wir verwenden, a Neue Schicht wird erstellt und zum Stapel hinzugefügt. In dieser Hinsicht ist Docker sehr schlau: Bereits gebaute Ebenen werden „zwischenstrichen“: Dies bedeutet, dass, wenn wir ein Bild basierend auf unserem erstellen Dockerfile
, Und dann beschließen wir zum Beispiel, einen weiteren hinzuzufügen LAUFEN
Anweisungen (und damit eine neue Ebene) am Ende beginnt der Build nicht von vorne, sondern wird nur die neuen Anweisungen ausführen.
Damit dies geschehen kann, sind die Anweisungen natürlich bereits auf dem aufgebaut Dockerfile
darf nicht geändert werden. Ist sogar möglich, dieses Verhalten beim Erstellen eines Bildes vollständig zu vermeiden, nur die Verwendung der --No-Cache
Option der Docker Build
Befehl.
In unserem Fall haben wir das benutzt LAUFEN
Anweisungen zur Ausführung des APT-Get-Update && apt-Get -y install apache2
Befehle. Beachten Sie, wie wir das verabschiedet haben -y
Option zur APT-GET-Installation
Befehl: Diese Option macht so, dass eine positive Antwort automatisch auf alle vom Befehl erforderlichen Bestätigungen gegeben wird. Dies ist notwendig, da wir das Paket nicht-interaktiv installieren.
Port 80 enthüllen
Wie wir wissen, hört der Apache -Webserver auf Port 80
für Standardverbindungen. Wir müssen Docker anweisen, diesen Port auf dem Container zugänglich zu machen. Um die Aufgabe zu erfüllen, verwenden wir die EXPONIEREN
Funktion und geben Sie die Portnummer an. Aus Sicherheitsgründen wird der angegebene Port nur dann geöffnet, wenn der Container gestartet wird. Fügen wir diese Anweisung zu unserem hinzu Dockerfile
:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-Get-Update && apt-Get -y install apache2 expose 80
Kopieren Aufbau des Bildes
Zu diesem Zeitpunkt können wir bereits versuchen, unser Bild zu erstellen. Aus dem Root-Verzeichnis unseres Projekts „Dockerized-Apache“ führen wir den folgenden Befehl aus:
$ sudo docer Build -t linuxconfig/dockerized -Apache .
Lassen Sie uns den Befehl untersuchen. Zunächst haben wir den Befehl mit sudo vorangestellt, um ihn mit administrativen Privilegien auszuführen. Es ist möglich, dies zu vermeiden, indem Sie einen Benutzer zu dem hinzufügen Docker
Gruppe, aber dies ist ein Sicherheitsrisiko. Der -T
Option, die wir zur Verfügung gestellt haben, kurz für --Schild
, Lassen Sie uns einen Repository -Namen und optional ein Tag auf unser Bild anwenden, wenn der Build erfolgreich ist.
Endlich, das .
weist Docker an, nach dem zu suchen Dockerfile
im aktuellen Verzeichnis. Sobald wir den Befehl starten, wird der Build -Prozess beginnen. Die Fortschritts- und Build -Nachrichten werden auf dem Bildschirm angezeigt:
Senden von Build -Kontext an Docker Daemon 2.048 KB Schritt 1/4: Von Ubuntu: 18.10 Versuch, Repository Docker zu ziehen.IO/Bibliothek/Ubuntu… . [… .]
Kopieren In wenigen Minuten sollte unser Bild erfolgreich erstellt werden. Um es zu überprüfen, können wir die ausführen Dockerbilder
Befehl, der eine Liste aller in unserem lokalen Docker -Repository vorhandenen Bilder zurückgibt:
$ sudo docer bilder repository Tag Bild-ID Erstellt Größe LinuxConfig/Dockerized-Apache Neueste 7AB7B6873614 Vor 2 Minuten 191 MB
Kopieren Wie erwartet erscheint das Bild in der Liste. Wie wir bemerken können, haben wir kein Tag angegeben (nur einen Repository -Namen, LinuxConfig/Dockerized-Apache
) Die neueste
Tag wurde automatisch auf unser Bild angewendet. Ein AUSWEIS
wurde dem IT auch zugewiesen, 7AB7B6873614
: Wir können es verwenden, um das Bild in zukünftigen Befehlen zu verweisen.
Starten eines Containers basierend auf dem Bild
Nachdem unser Bild fertig ist, können wir a erstellen und starten Container
basierend darauf. Um die Aufgabe zu erfüllen, verwenden wir die Docker Run
Befehl:
$ sudo docer run --Name = linuxconfig -apache -d -p 8080: 80 LinuxConfig/Dockerized -Apache Apachectl -d Vordergrund
Lassen Sie uns den obigen Befehl untersuchen. Die erste Option, die wir zur Verfügung stellten, war --Name
: Damit geben wir einen Namen für den Container an, in diesem Fall "LinuxConfig-Apache". Wenn wir diese Option weggelassen haben, wäre ein zufälliger generierter Name unserem Container zugewiesen worden.
Der -D
Option (kurz für --ablösen
) lässt den Behälter im Hintergrund laufen.
Der -P
Option, kurz für --veröffentlichen
, wird benötigt, um einen Containerport (oder eine Reihe von Ports) an das Hostsystem zu veröffentlichen. Die Syntax der Option ist Folgendes:
-P localhost_port: container_port
In diesem Fall haben wir die veröffentlicht Port 80
Wir haben zuvor im Behälter dem Wirt ausgesetzt Port 8080
. Aus Vollständigkeit müssen wir sagen, dass es auch möglich ist, die zu verwenden -P
Option (kurz für --Veröffentlichung-alle
) Stattdessen werden alle im Behälter freigelegten Ports zugeordnet willkürlich
Ports auf dem Host.
Die letzten beiden Dinge, die wir im obigen Befehl angegeben haben, sind: die Bild
Der Behälter sollte auf und auf die basieren Befehl
Wenn der Container gestartet wird, ist dies optional, wenn der Container gestartet wird. Das Bild ist natürlich LinuxConfig/Dockerized-Apache
, der, den wir zuvor gebaut haben.
Der von uns angegebene Befehl ist APACHECTL -D Vordergrund
. Mit diesem Befehl die Apache
Der Webserver wird in gestartet Vordergrund
Modus: Dies ist obligatorisch, damit es im Container funktioniert. Der Docker Run
Der Befehl führt den angegebenen Befehl auf a aus neu
Container:
$ sudo docker run --Name = linuxconfig -apache -d -p 8080: 80 LinuxConfig/Dockerized -Apache Apachectl -d Vordergrund A51FC9A6DDD6B02117F00235A341003A9BF0FFD53F90A040BC1122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222
Kopieren Wie lautet die auf dem Bildschirm gedruckte Nummer? Es ist der AUSWEIS
des Behälters! Sobald wir den Container in Betrieb haben, sollten wir in der Lage sein, auf die vom Standard servierte Seite zugreifen zu können Apache
Virtualhost am Localhost: 8080
Adresse (Port 8080
auf dem Host wird am Port zugeordnet 80
auf dem Behälter):
Standard -Apache -Index.HTML -Seite
Unser Setup funktioniert richtig. Wenn wir die laufen lassen Docker PS
Befehl, bei dem alle aktiven Container im System aufgeführt sind, können wir Informationen zu unserem Container abrufen: ID (Kurzversion, leichter zu verweisen auf die Befehlszeile für einen Menschen), das Bild, aus dem es ausgeführt wurde, der verwendete Befehl, seine Erstellung Zeit und aktueller Status, Ports Mapping und Name.
$ sudo docer ps container id bombild erstellte statusports namens a51fc9a6dd66 linuxconfig/dockerized -apache "apachectl -d vor…" vor 28 Sekunden bis 28 Sekunden 0.0.0.0: 8080-> 80/TCP LinuxConfig-Apache
Kopieren Um es zu stoppen, müssen wir nur den Container durch seine ID oder den Namen verweisen und die ausführen Docker Stopp
Befehl. Zum Beispiel:
$ sudo docker stop linuxconfig-Apache
Um es erneut zu beginnen:
$ sudo docer starten linuxconfig-Apache
Führen Sie den Befehl direkt über die Dockerfile aus
Seit hier haben wir ein grundlegendes Bild erstellt und zur Laufzeit mit dem Docker Run
Befehl, wir haben den Befehl angegeben, der gestartet wird, wenn der Container gestartet wird. Manchmal möchten wir letztere direkt in der Dockerfile angeben. Wir können es auf zwei Arten tun: Verwenden CMD
oder EINSTIEGSPUNKT
.
Beide Anweisungen können für denselben Zweck verwendet werden, verhalten sich jedoch anders, wenn ein Befehl auch aus der Befehlszeile angegeben ist. Mal sehen, wie.
Die CMD -Anweisung
Der CMD
Der Befehl kann im Grunde genommen in zwei Formen verwendet werden. Das erste ist das Geschäftsführer
form:
CMD ["/usr/sbin/apachektl", "-d", "Vordergrund"]
Der andere ist das Hülse
form:
CMD/USR/SBIN/APACHECTL -D -Vordergrund
Der Geschäftsführer
von wird normalerweise bevorzugt. Bei Verwendung des Exec -Formulars ist es wert. Wenn eine variable Erweiterung erforderlich ist, können wir die verwenden Hülse
Form oder wir können eine Shell direkt in der aufrufen Geschäftsführer
Modus, wie:
Cmd ["sh", "-c", "echo", "$ home"]
Der CMD
Der Befehl kann nur einmal in der angegeben werden Dockerfile
. Wenn mehrere CMD
Es werden Optionen zur Verfügung gestellt, nur der letzte wird wirksam werden. Der Zweck der Anweisung ist es, a zu liefern Standard
Befehl, der gestartet wird, wenn der Container startet:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-Get-Update && apt-Get -y install apache2 Entdecken Sie 80 cmd ["/usr/sbin/apachektl "," -d "," Vordergrund "]
Kopieren Der Befehl angegeben mit CMD
in der Dockerfile
, Funktioniert als Standard und wird überschrieben, wenn ein anderer Befehl aus der Befehlszeile bei der Ausführung angegeben ist Docker Run
.
Die Eintragspunktanweisung
Der EINSTIEGSPUNKT
Der Befehl kann auch verwendet werden, um einen Befehl zu konfigurieren, der verwendet werden soll, wenn der Container gestartet wird und wie CMD
, beide Geschäftsführer
Und Hülse
Form kann damit verwendet werden. Der große Unterschied zwischen den beiden besteht darin, dass ein von der Befehlszeile übergebener Befehl den mit der angegebenen nicht überschreibt EINSTIEGSPUNKT
: Stattdessen wird es sein angehängt dazu.
Durch die Verwendung dieser Anweisung können wir einen grundlegenden Befehl angeben und diese mit den Optionen ändern, die wir beim Ausführen des Ausführens angeben Docker-Run
Befehl, unseren Container verhalten wie eine ausführbare Datei. Lassen Sie uns ein Beispiel mit unserem sehen Dockerfile
:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-Get-Update && apt-Get -y install apache2 expose 80 Einstiegspunkt ["/usr/sbin/apachektl "]
Kopieren In diesem Fall haben wir das ersetzt CMD
Anweisung mit EINSTIEGSPUNKT
und entfernte auch die -D Vordergrund
Option aus dem Exec -Format. Angenommen, wir bauen jetzt das Bild wieder auf und erstellen den Container mit dem folgenden Befehl neu:
$ sudo docer run --Name = linuxconfig -apache -d -p 8080: 80 LinuxConfig/Dockerized -Apache -d -Vordergrund
Wenn der Behälter beginnt, die -D Vordergrund
Argumente sind an den Befehl beigefügt in der Dockerfile
mit dem EINSTIEGSPUNKT
Anweisung, jedoch nur, wenn Sie die verwenden Geschäftsführer
form. Dies kann überprüft werden, indem Sie das ausführen Docker PS
Befehl (Hier haben wir dem Befehl einige Optionen hinzugefügt, um die Ausgabe besser anzuzeigen und zu formatieren und nur die Informationen auszuwählen, die wir benötigen):
$ sudo docer ps --no-trunc-format ".Namen \ t .Befehl "LinuxConfig -apache"/usr/sbin/apachektl -d Vordergrund "
Kopieren So wie CMD
, Die EINSTIEGSPUNKT
Die Anweisung kann nur einmal zur Verfügung gestellt werden. Wenn es in der Dockerfile mehrere Zeit erscheint, wird nur das letzte Ereignis berücksichtigt. Es ist möglich, den Standard zu überschreiben EINSTIEGSPUNKT
des Bildes aus der Befehlszeile mit der Verwendung der --Einstiegspunkt
Option der Docker Run
Befehl.
Kombinieren Sie CMD und Einstiegspunkt
Jetzt, da wir die Besonderheit der CMD
Und EINSTIEGSPUNKT
Anweisungen können wir sie auch kombinieren. Was können wir dabei erhalten?? Wir können benutzen EINSTIEGSPUNKT
um einen gültigen Basisbefehl anzugeben und die CMD
Anweisungen zum Angeben von Standardparametern dafür.
Der Befehl wird standardmäßig mit diesen Standardparametern ausgeführt, es sei denn, wir überschreiben sie beim Ausführen von der Befehlszeile Docker Run
. An unserem bleiben Dockerfile
, Wir könnten schreiben:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-Get-Update && apt-get -y install apache2 expose 80 Einstiegspunkt ["/usr/sbin/apachektl "] cmd [" -d "," Vordergrund "]
Kopieren Wenn wir das Bild daraus neu aufbauen Dockerfile
, Entfernen Sie den von uns erstellten vorherigen Behälter und starten Sie das erneut Docker Run
Befehl ohne zusätzliche Argumentation, die, die /usr/bin/apachektl -d Vordergrund
Der Befehl wird ausgeführt. Wenn wir stattdessen einige Argumente vorlegen, werden sie die in der angegebenen außer Kraft setzen Dockerfile
mit dem CMD
Anweisung. Zum Beispiel, wenn wir rennen:
$ sudo docer run --Name = linuxconfig -apache -d -p 8080: 80 LinuxConfig/Dockerized -Apache -x -x
Der Befehl, der beim Starten des Containers ausgeführt wird /usr/bin/apachectl -x
. Überprüfen wir es:
$ sudo docer ps --no-trunc-format ".Namen \ t .Befehl "LinuxConfig -apache"/usr/sbin/apachectl -x "
Kopieren Der Befehl wurde wie erwartet: die -X
Die Option macht übrigens so, dass der HTTPD -Dämon in gestartet wird Debug-Modus
.
Kopieren von Dateien in den Container
Unser "Dockerisierter" Apache -Server funktioniert. Wie wir gesehen haben, wenn wir navigieren zu Localhost: 8080
, Wir visualisieren die Standard -Apache -Begrüßungsseite. Nehmen Sie nun an, wir haben eine Website, die bereit ist, mit dem Container versandt zu werden. Wie können wir sie „laden“, damit Apache sie stattdessen serviert?
Für dieses Tutorial werden wir nur den Standardindex ersetzen.HTML -Datei. Um die Aufgabe zu erfüllen, können wir die verwenden KOPIEREN
Anweisung. Angenommen, wir haben einen alternativen Index.HTML -Datei im Root unseres Projekts (unserem Build -Kontext) mit diesem Inhalt:
Hallo!
Diese Datei wurde mit der Kopieranweisung in den Container kopiert!
Kopieren Wir wollen es laden und in die kopieren /var/www/html
Verzeichnis im Container, daher in unserem Dockerfile
Wir fügen die hinzu KOPIEREN
Anweisung:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-GET-Update && apt-get -y install apache2 expose 80 Einstiegspunkt ["/usr/sbin/apachektl "] cmd [" -d "," Vordergrund "] Kopierenindex Kopierenindex kopieren.html/var/www/html/Index.html
Kopieren Wir bauen das Bild und den Container wieder auf. Wenn nun navigieren Sie zu Localhost: 8080
, Wir werden die neue Nachricht sehen:
# neue Nachricht
Der KOPIEREN
Anweisungen können verwendet werden, um sowohl Dateien als auch Verzeichnisse zu kopieren. Wenn der Zielpfad nicht existiert, wird er im Container erstellt. Alle neuen Dateien und Verzeichnisse werden mit einem erstellt Uid
Und Gid
von 0
.
Eine andere Possibile -Lösung zum Kopieren von Dateien im Container besteht darin, die zu verwenden HINZUFÜGEN
Anweisung, der mächtiger ist als KOPIEREN
. Mit dieser Anweisung können wir Dateien, Verzeichnisse aber auch kopieren URLs
. Außerdem kopieren wir einen Einheimischen Teerarchiv
Mit einem anerkannten komprimierten Format wird es automatisch unkomprimiert und als Verzeichnis im Container kopiert.
Die ideale Strategie wäre die Verwendung KOPIEREN
es sei denn die zusätzlichen Funktionen von bereitgestellt von HINZUFÜGEN
sind wirklich gebraucht.
Ein Volumen erstellen
Im vorherigen Beispiel, um zu demonstrieren, wie die KOPIEREN
Die Anweisung funktioniert, wir haben den Standardindex ersetzt.HTML -Datei des Standard -Apache -VirtualHost im Container.
Wenn wir anhalten und den Container starten, werden wir immer noch die von uns vorgenommene Änderung finden, aber wenn der Container aus irgendeinem Grund entfernt wird, gehen alle auf seiner beschreibbaren Schicht enthaltenen Daten damit verloren. Wie man dieses Problem lösen? Ein Ansatz ist die Verwendung des VOLUMEN
Anweisung:
Von Ubuntu: 18.10 label sorter = "[email protected] "APT-GET-Update && apt-get -y install apache2 expose 80 Einstiegspunkt ["/usr/sbin/apachektl "] cmd [" -d "," Vordergrund "] Kopierenindex Kopierenindex kopieren.html/var/www/html/Index.HTML Volumen/var/www/html
Kopieren Der VOLUMEN
Der Anweisungen erfordert ein oder mehrere Verzeichnisse (in diesem Fall /var/www/html
) und veranlasst sie als Mountpoints für externe, zufällig benannte Volumina, die beim Erstellen des Containers erzeugt werden.
Auf diese Weise werden die Daten, die wir in die als Mountpoints verwendeten Verzeichnisse eingeben. Wenn ein als Mountpoint verwendeter Verzeichnissatz bereits zur Initialisierungszeit Daten enthält, werden diese Daten innerhalb des darauf montierten Volumens kopiert.
Lassen Sie uns das Bild und den Container wieder aufbauen. Wir können nun überprüfen, ob das Volumen erstellt wurde und er verwendet wird, indem wir den Container inspizieren:
$ sudo docer inspect linuxconfig-Apache […… .] "Mounts": [ "Type": "volume", "Name": "8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61", "Source": "/var/lib/docker/volumes/8f24f75459c24c491b2a5e53265842068d7c44bf1b0ef54f98b85ad08e673e61/_data", "Destination": "/var/ www/html "," Treiber ":" Lokal "," Modus ":" "," rw ": wahr," Propagation ":" "], [.. .]
Kopieren Wie bereits erwähnt, wird das Volumen auch nach der Zerstörung des Containers überleben, sodass unsere Daten nicht verloren gehen werden.
Der VOLUMEN
Anweisung im Inneren der Dockefile
, Wie wir aus der Output des obigen Docker -Inspektionsbefehls sehen können. A Volumen genannt
, Oder um ein bereits vorhandenes Volumen in einem Container zu montieren, müssen wir es zur Laufzeit angeben, wenn Sie das ausführen Docker Run
Befehl verwenden die -v
Option (kurz für --Volumen
). Lassen Sie uns ein Beispiel sehen:
$ sudo docer run --Name = linuxconfig -apache -d -p 8080: 80 -v myvolume:/var/www/html linuxconfig/dockerized -Apache
Im obigen Befehl haben wir die verwendet -v
Option, die angeben Bandname
(Sehr wichtig: Beachten Sie, dass es sich nicht um einen Weg, sondern ein einfacher Name ist) und die Einhängepunkt
Innerhalb des Containers mit der folgenden Syntax:
:
Wenn wir einen solchen Befehl ausführen, wird das Volumen mit dem Namen „MyVolume“ auf dem spezifischen Pfad im Container montiert (das Volumen wird erstellt, wenn es noch nicht vorhanden ist). Wie bereits erwähnt, werden die bereits auf dem Mountpoint im Container vorhandenen Daten im Container kopiert, wenn das Volumen leer ist. Verwendung der Docker Volume Ls
Befehl, wir können bestätigen, dass ein Volumen mit dem von uns angegebenen Namen erstellt wurde:
$ sudo docker Volumen LS Treiber Volumen Name Lokales MyVolume
Kopieren Um ein Volumen zu entfernen, verwenden wir das Docker -Volumen RM
Befehl und geben Sie den zum Entfernen des Volumes an. Docker lässt uns jedoch nicht ein Volumen entfernen, das von einem aktiven Behälter verwendet wird:
$ sudo docer Volumen RM MyVolume Fehlerantwort von Daemon: Volumen kann nicht entfernen, Lautstärke noch verwendet: MyVolume entfernen: Volumen wird verwendet - [95381B7B6003F6165DFE2E1912D2F827F7167AC26E22CF26C1BCAB704A2D7E02]
Kopieren Ein weiterer Ansatz für die Datenbeständigkeit, insbesondere bei der Entwicklung, ist zu Bindungsmontage
ein Hostverzeichnis im Container. Dieser Ansatz hat den Vorteil, dass wir mit unseren Lieblingswerkzeugen lokal an unserem Code arbeiten und die Auswirkungen der Änderungen sofort im Container sehen, aber einen großen Nachteil haben: Der Container wird von der Hostverzeichnisstruktur abhängig.
Aus diesem Grund ist die Portabilität eines der Hauptziele von Docker nicht möglich, um a zu definieren Bindungsmontage
In einer Dockerfile, aber nur zur Laufzeit. Um diese Aufgabe zu erfüllen, verwenden wir die -v
Option von Docker Run
Befehl noch einmal, aber diesmal geben wir die an Weg
eines Verzeichnisses im Host -Dateisystem anstelle eines Volumennamens:
$ sudo docer run --Name = linuxconfig -apache -d -p 8080: 80 -v/path/on/host:/var/www/html linuxconfig/dockerized -apache
Beim Starten des obigen Befehls wird das Hostverzeichnis/Pfad/ON/Host auf/var/www/html im Container montiert. Wenn das Verzeichnis auf dem Host nicht existiert, wird es automatisch erstellt. In diesem Fall Daten im MountPoint -Verzeichnis im Container (/var/www/html in unserem Beispiel) ist nicht kopiert in das darauf montierte Hostverzeichnis, wie es stattdessen für Bände geschieht.
Abschluss
In diesem Tutorial haben wir die Grundlagenkonzepte gelernt, die zum Erstellen und Erstellen eines Docker -Images mit a erforderlich sind Dockerfile
und wie man einen darauf basierenden Container ausführt. Wir haben ein sehr einfaches Bild erstellt, mit dem wir eine "Dockerized" -Version des Apache -Webservers ausführen können. Dabei haben wir gesehen, wie man das benutzt AUS
Anweisungen, die obligatorisch ist, um ein Basisbild zu spezifizieren, an dem Sie arbeiten können, die ETIKETT
Anweisung zum Hinzufügen von Metadaten zu unserem Bild, die EXPONIEREN
Anweisung, die Anschlüsse im Container auszusetzen, um zu deklarieren. Wir haben auch gelernt, wie man diese Ports an die Host -System -Ports (en) zuordnet.
Wir haben gelernt, wie man das benutztLAUFEN
Anweisungen zum Ausführen von Befehlen auf dem Bild, und wir haben gelernt, wie man einen Befehl angibt Dockerfile
. Wir haben gesehen, wie wir das erreichen können, indem wir die verwenden CMD
Und EINSTIEGSPUNKT
Anweisungen und was sind die Unterschiede zwischen den beiden. Schließlich sahen wir, wie es geht KOPIEREN
Daten im Container und wie die Datenpersistenz mit Volumina erreicht werden. In unseren Beispielen haben wir nur eine kleine Untergruppe der Anweisungen besprochen, die in a verwendet werden können Dockerfile
.
Eine vollständige und detaillierte Liste finden Sie in der offiziellen Docker -Dokumentation. In der Zwischenzeit, wenn Sie wissen möchten, wie man ein ganzes baut LAMPE
Stack Mit Docker und dem Docker-Compose-Tool können Sie einen Blick auf unseren Artikel über die Erstellung eines Docker-basierten Lampenstacks mit Docker-Compose auf Ubuntu 18 werfen.04 Bionic Beaver Linux.
Verwandte Linux -Tutorials:
- Eine Einführung in Linux -Automatisierung, Tools und Techniken
- Dinge zu tun nach der Installation Ubuntu 20.04 fokale Fossa Linux
- Dinge zu installieren auf Ubuntu 20.04
- So montieren Sie das ISO -Bild unter Linux
- So erstellen Sie inkrementelle Systemsicherungen mit Timeshift auf…
- Kubernetes gegen Docker, was ist der Unterschied?
- So ändern Sie ein QCOW2 -Datenträgerbild unter Linux
- So erstellen Sie einen Docker -basierten Lampenstapel mit Docker auf…
- Mastering -Bash -Skriptschleifen beherrschen
- Dinge zu tun nach der Installation Ubuntu 22.04 Jammy Quallen…
- « Einführung in Grep und reguläre Ausdrücke
- So wiederherstellen Sie gelöschte Dateien mit vorderster Stelle unter Linux »