So erstellen Sie ein Docker -Bild mit einer Dockerfile

So erstellen Sie ein Docker -Bild mit einer Dockerfile

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

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System OS-unabhängig
Software Docker
Andere
  • Ein laufender Docker -Daemon
  • Das Docker -Befehlszeilendienstprogramm
  • Vertrautheit mit der Linux -Befehlszeilenschnittstelle
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 benutzt
LAUFEN 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…