Heute schauen wir uns an, wie man eine Docker-Datei erstellt. Es gibt zwei Möglichkeiten, ein Docker-Image zu erstellen: 1. Eine Möglichkeit besteht darin, den Befehl „Docker Commit“ zu verwenden 2. Ein anderer basiert auf dem Docker-Build-Befehl und der Dockerfile-Datei Im Allgemeinen ist das Erstellen eines Images mit Dockerfile flexibler als das Erstellen eines Images mit dem Docker-Commit-Befehl, daher wird letzterer häufiger verwendet. Erstellen Sie ein Docker-Image mit Dockerfile1. Was ist Dockerfile?Ein Dockerfile ist eine Datei, die mit DSL-Syntax geschrieben wird. Anschließend wird mit dem Befehl „Docker Build“ ein neues Image basierend auf den Anweisungen in der Dockerfile-Datei erstellt. Angenommen, unser Code lautet: mkdir-Test CD-Test Docker-Datei berühren Es ist nicht schwer zu erkennen, dass wir ein Testverzeichnis erstellt und das Verzeichnis aufgerufen haben, um eine Dockerfile_test-Datei zu erstellen. Dieses Verzeichnis wird als unsere Build-Umgebung bezeichnet. Docker nennt diese Umgebung Kontext oder Build-Kontext. Docker lädt den Build-Kontext und die Dateien und Verzeichnisse im Kontext beim Erstellen des Images in den Docker-Daemon hoch, sodass der Docker-Daemon direkt auf jeden Code, alle Dateien oder andere Daten zugreifen kann, die Sie im Image speichern. Werfen wir einen Blick auf den Inhalt einer Docker-Datei: # Version: 0.0.1 VON Ubuntu:14.04 WARTUNGSBEARBEITER Yeyz '[email protected]' Führen Sie apt-get update aus. Führen Sie apt-get install -y nginx aus. RUN echo 'Hallo, ich bin Ihr Container' > /root/test.html AUSSETZEN 80 Aus dem obigen Dateiinhalt lässt sich leicht erkennen, dass das Dockerfile eine Reihe von Befehlen enthält. Jeder Befehl muss mit einem Schlüsselwort in Großbuchstaben gekennzeichnet werden. Inhalte, die mit # beginnen, werden als Kommentar erkannt. Docker führt die Befehle im Dockerfile im Allgemeinen in der folgenden Reihenfolge aus: 1. Docker führt einen Container von einem Basisimage aus. Der erste Befehl jeder Docker-Datei sollte From sein. From gibt ein Basisimage an und nachfolgende Anweisungen werden auf dieser Basis ausgeführt. 2. Führen Sie eine Anweisung zum Ändern des Containers aus 3. Führen Sie ähnliche Vorgänge wie Docker Commit aus, um eine neue Image-Ebene zu übermitteln 4. Das Docker-Image führt einen Container basierend auf dem gerade übermittelten Image aus 5. Führen Sie die nächste Anweisung im Dockerfile aus, bis alle Containeranweisungen ausgeführt sind Wenn im obigen Prozess die Ausführung eines Schritts fehlschlägt, bedeutet dies, dass das Zielabbild nicht erstellt werden kann. Da das Zielabbild jedoch das Ergebnis der Stapelung eines Abbilds nach dem anderen ist, erhalten wir tatsächlich ein Abbild, das ausgeführt werden kann, aber noch nicht das endgültige Abbild erreicht hat. Diese Funktion ist für das Debuggen von Abbildern sehr wichtig. Wir erklären das obige Bild: Version: stellt einen Kommentar dar, der die Version angibt From-Anweisung, From gibt ein Basisimage Ubuntu an, was bedeutet, dass unsere Operation auf dem Basisimage Ubuntu ausgeführt wird Maintainer-Direktive, die den Autor des Bildes und die E-Mail-Adresse des Autors angibt Die RUN-Anweisung führt den angegebenen Befehl im aktuellen Image aus. Die drei Anweisungen dienen dazu, das Apt-Repository zu aktualisieren, das Nginx-Paket zu installieren und einen Befehl in die angegebene Datei zu drucken. Jeder Befehl erstellt eine Bildebene. Wenn der Befehl erfolgreich ist, wird die Image-Ebene festgeschrieben und anschließend die nächste Anweisung im DockerFile angegeben. Standardmäßig verwendet der Befehl RUN /bin/bash -c in der Shell, um die folgenden Anweisungen auszuführen. Die Expose-Anweisung weist die Anwendung im Container an, den angegebenen Port des Containers zu verwenden. Natürlich können Sie mehrere EXPOSE verwenden, um mehrere Ports der Außenwelt zugänglich zu machen. 2. Führen Sie eine Docker-Datei aus, um ein Image zu erstellenWir führen das Dockerfile jetzt einfach aus und erhalten folgendes Ergebnis: [Root-Test]# Docker Build -t='yeyz:test0'. Senden des Build-Kontexts an den Docker-Daemon 2.048 kB Schritt 1/6: VON Ubuntu:14.04 Es wird versucht, das Repository docker.io/library/ubuntu abzurufen ... 14.04: Abrufen von docker.io/library/ubuntu 2e6e20c8e2e6: Herunterladen [> ] 539,1 kB/70,69 MB 95201152d9ff: Download abgeschlossen 5f63a3b65493: Download abgeschlossen Mit der Option -t werden der Image- und der Warehouse-Name angegeben, wobei „yeyz“ der Warehouse-Name und „test0“ der Image-Name ist. Der . im Befehl stellt das aktuelle Verzeichnis dar. Docker sucht standardmäßig im lokalen Verzeichnis nach DockerFile. Es kann auch durch eine angegebene Quelladresse eines Git-Repositorys ersetzt werden, um den Speicherort von DockerFile anzugeben. wie folgt: Wenn Sie Versionsinformationen behalten möchten, können Sie wie folgt ein Tag angeben: Wenn wir nur einige Dateien in einem bestimmten Verzeichnis hochladen möchten, können wir eine .dockerignore-Datei erstellen, in der jede Zeile ein Dateifilter ist, der dem Muster entspricht. Auf diese Weise werden beim Generieren des Images unnötige Dateien automatisch herausgefiltert. Der endgültige Rückgabewert ist eine Image-ID. Nachdem wir die Image-ID erhalten haben, können wir das Image mit dem Befehl „Docker Run“ ausführen. 3. Dockerfile-Build-Cache Wenn beim ersten Erstellen der Docker-Datei ein Problem auftritt, müssen wir sie erneut erstellen. Diesmal werden dieselben Anweisungen ausgeführt. Angenommen, wir ändern den Inhalt von Zeile 4 in der Docker-Datei. Dann lädt Docker die ersten drei Zeilen automatisch durch Zwischenspeichern, was viel Zeit spart. Wenn wir den Dockerfile-Cache nicht verwenden möchten, können wir die Verwendung des Dockerfile-Cache vermeiden, indem wir den Parameter --no-cache hinzufügen. 4. Anzeigen des Image-Build-Verlaufs Der Docker-Verlauf kann den Build-Verlauf des erstellten Images und jede Ebene des erstellten Images anzeigen. [root@VM-16-13-centos test]# Docker-Images MySQL REPOSITORY TAG BILD ID ERSTELLT GRÖSSE docker.io/mysql latest 4f1413420360 vor 7 Wochen 545 MB [root@VM-16-13-centos test]# Docker-Verlauf 4f1413420360 BILD ERSTELLT ERSTELLT VON GRÖSSE KOMMENTAR 4f1413420360 vor 7 Wochen /bin/sh -c #(nop) CMD ["mysqld"] 0 B <fehlt> vor 7 Wochen /bin/sh -c #(nop) EXPOSE 3306 33060 0 B <fehlt> vor 7 Wochen /bin/sh -c #(nop) ENTRYPOINT ["docker-ent... 0 B <fehlt> vor 7 Wochen /bin/sh -c ln -s usr/local/bin/docker-entr... 34 B <fehlt> vor 7 Wochen /bin/sh -c #(nop) COPY file:f9202f6b715c0e... 13,1 kB <fehlt> vor 7 Wochen /bin/sh -c #(nop) COPY dir:2e040acc386ebd2... 1,12 kB <fehlt> vor 7 Wochen /bin/sh -c #(nop) VOLUME [/var/lib/mysql] 0 B <fehlt> vor 7 Wochen /bin/sh -c { echo mysql-community-server... 410 MB <fehlt> vor 7 Wochen /bin/sh -c echo "deb http://repo.mysql.com... 55 B <fehlt> vor 7 Wochen /bin/sh -c #(nop) ENV MYSQL_VERSION=8.0.2... 0 B <fehlt> vor 7 Wochen /bin/sh -c #(nop) ENV MYSQL_MAJOR=8.0 0 B <fehlt> vor 7 Wochen /bin/sh -c set -ex; key='A4A9406876FCBD3C... 2,61 kB <fehlt> vor 7 Wochen /bin/sh -c apt-get update && apt-get insta... 52,2 MB <fehlt> vor 7 Wochen /bin/sh -c mkdir /docker-entrypoint-initdb.d 0 B <missing> vor 7 Wochen /bin/sh -c set -eux; savedAptMark="$(apt-... 4,17 MB <fehlt> vor 7 Wochen /bin/sh -c #(nop) ENV GOSU_VERSION=1.12 0 B <fehlt> vor 7 Wochen /bin/sh -c apt-get update && apt-get insta... 9,34 MB <fehlt> vor 7 Wochen /bin/sh -c groupadd -r mysql && useradd -r... 329 kB <fehlt> vor 7 Wochen /bin/sh -c #(nop) CMD ["bash"] 0 B <fehlt> vor 7 Wochen /bin/sh -c #(nop) ADD file:d2abb0e4e7ac177... 69,2 MB Oben finden Sie Einzelheiten zur Verwendung von Dockerfile zum Erstellen von Docker-Images. Weitere Informationen zur Verwendung von Dockerfile zum Erstellen von Docker-Images finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: So erreichen Sie eine nahtlose Token-Aktualisierung
Wenn Sie Tomcat in Docker installieren, kann es b...
【Problemanalyse】 Wir können den Befehl chown verw...
Es gibt auch zwei Server: Vorbereitung: Legen Sie...
Code kopieren Der Code lautet wie folgt: <Kopf...
Inhaltsverzeichnis 【Code-Hintergrund】 【Code-Imple...
In diesem Artikelbeispiel wird der spezifische Im...
Vor kurzem hat das Unternehmen zufällig Live-Über...
Erstellen Sie ein Verzeichnis cd /usr/local/docke...
Vorwort 1. Benchmarking ist eine Art Leistungstes...
Offizielle Version von MySQL v5.7.19 (32/64-Bit-I...
Kubernetes unterstützt drei Arten der Authentifiz...
Der automatische Bildlaufeffekt der Seite kann du...
VMware Tools ist ein Tool, das mit virtuellen VMw...
Die in MySQL integrierte Datumsfunktion TIMESTAMP...
[Problembeschreibung] Auf der Anwendungsseite wir...