Heim >Technologie-Peripheriegeräte >IT Industrie >So erstellen Sie ein Bild mit der Dockerfile
vom Erstellen von Anwendungen, Installation von Abhängigkeiten und Diensten, die automatisierte Bereitstellung und vieles mehr - alles beginnt mit Dockerfile. Lassen Sie uns die Syntax von Dockerfile von Grund auf Komplexität und einige Best Practices beim Erstellen von Docker -Bildern überprüfen.
In diesem Handbuch wird eine Dockerfile geschrieben, die Docker dazu führt, ein minimiertes Linux (Basisbild) für die von uns lieferenden Anwendungen auszuwählen, und wird mit unserem ausgewählten Toolset und einer spezifischen Konfiguration geliefert, um unsere eigene Linux -Verteilung effektiv zu erstellen. Diese Verteilung ist genau richtig geeignet für die Ausführung unserer Anwendungen.
Mit Docker können Sie "eine Bewerbung erstellen, liefern und ausführen, unabhängig davon, wo Sie sich befinden." Das heißt, Sie können Ihre Anwendung mit allen Binär- und Laufzeitbibliotheken, Backend -Tools, Betriebssystemeinstellungen und sogar spezifischen Diensten verpacken, die für die Ausführung der Anwendung erforderlich sind - und ermöglichen es, automatisch bereitgestellt und bereitgestellt zu werden.
Docker implementierte Software -Container -Technologie ermöglicht dies. Obwohl ich hier nicht auf die Details eingehen werde, können Sie mehr über Docker lesen, welche Software -Container sind und wie sie arbeiten, um Docker, Container und sicherere Software -Zustellung zu verstehen.
Installieren von Docker
Glücklicherweise macht die neueste Version von Docker (Version 1.12 nach diesem Schreiben) den Installationsprozess sehr reibungslos und Sie können eine einfache und leicht verständliche Anleitung für Windows, MacOS und Linux erhalten.
Um das Bild in Docker zu erstellen, müssen Sie zunächst die Anweisung für diesen Build und den -Kontext in einer einfachen Textdatei namens Dockerfile festlegen (dazu später mehr). Diese Datei hat eine Syntax, die der Apache -Konfigurationsdatei ähnelt - eine Anweisung pro Zeile und ihre entsprechenden Parameter, alle Anweisungen werden nacheinander verarbeitet. Kommentare beginnen mit # Charakteren und Räumen. Sobald Sie die Dockerfile haben, erstellt der Befehl Docker Build das Bild, das wir später ausführlicher behandeln werden.
Bevor wir mit dem Schreiben der Dockerfile beginnen, werden wir den Arbeitsbereich einrichten. Wir erstellen ein Verzeichnis namens My_Image im Home -Verzeichnis, verwenden es als unser Arbeitsverzeichnis und platzieren die Dockerfile darin:
<code class="language-bash">mkdir ~/my_build cd ~/my_build touch Dockerfile</code>Jetzt sind wir bereit, das Bild zu erstellen.
Wählen Sie Basic Mirror
Hinweis : Sie können Ihr eigenes Grundbild mit Dockers Minimum -Bild (Scratch genannt) erstellen, das Ihre eigenen Kernwerkzeuge und Verzeichnisstruktur enthält. Ich werde diesen Prozess hier nicht behandeln, aber Sie können sich auf die Anleitung zum Erstellen von grundlegenden Bildern auf der Docker -Website verweisen.
Wenn Sie beispielsweise mit einer minimierten Debian -Verteilung beginnen möchten, werden Sie Ihre Dockerfile Folgendes hinzufügen:
<code class="language-dockerfile"># 设置基础镜像 FROM debian</code>von Must sein die erste Anweisung, die Sie beim Schreiben einer Dockerfile verwenden. Beachten Sie, dass Sie auch eine bestimmte Version des Basisbildes verwenden können, indem Sie am Ende des Bildnamens anhängen: und Version_Name. Zum Beispiel:
<code class="language-dockerfile"># 设置基础镜像 FROM debian:sid</code>Im obigen Code verwenden wir "Sid" Debian (instabile Verteilung). Dies ist auch wichtig, wenn Sie eine bestimmte Version von Ruby oder Python Interpreter, MySQL -Version usw. benötigen. Wenn Sie das offizielle Grundbild eines dieser Tools verwenden. Derzeit halten wir uns in diesem Handbuch an das stabile (stabile) Debian -Bild.
Geben Sie den Betreuer an und fügen Sie Metadaten hinzu
<code class="language-dockerfile"># 作者 MAINTAINER Lucero del Alba</code>Dies ist nicht erforderlich, aber wir können auch einige Metadaten mit der Label -Anweisung hinzufügen, die später verfügbar ist, wenn das Bild mit dem Befehl Docker Inspect überprüft wird:
<code class="language-dockerfile"># 额外的元数据 LABEL version="1.0" LABEL description="First image with Dockerfile."</code>Weitere Informationen zu dieser Funktion finden Sie im Docker -Objekt -Tag.
Erstellen Sie Ihre eigene Verteilung
Einige Container (z. Wir benötigen jedoch häufig eine Konsole, um bestimmte Vorgänge im Container auszuführen. Möglicherweise benötigen wir möglicherweise einige zusätzliche Werkzeuge, da das zugrunde liegende Bild nur die minimalen GNU -Tools bündelt.
Sie werden mit ziemlicher Sicherheit Probleme mit dem Zwischenspeichern haben, wenn Sie versuchen, zusätzliche Pakete auf Ihrem Bild zu installieren. Dies liegt daran, dass das zugrunde liegende Bild zwischen Metadaten und dem Echtzeit-Repository zwischengespeichert wurde, aus dem Sie Datenänderungen häufig extrahieren.
In einer debianbasierten Verteilung können Sie den folgenden Befehl hinzufügen, bevor Sie ein neues Paket installieren, um dies zu verarbeiten:
<code class="language-bash">mkdir ~/my_build cd ~/my_build touch Dockerfile</code>
Tools wie Code -Editor, Laceale, Git oder TMUX - jetzt ist es an der Zeit, alles zu installieren, was Sie danach benötigen, damit sie im Bild gebündelt sind.
Wir werden eine pro Zeile installieren:
<code class="language-dockerfile"># 设置基础镜像 FROM debian</code>
Wir können all dies in einer Zeile installieren, aber wenn wir später Pakete hinzufügen oder entfernen möchten, müssen wir den gesamten Vorgang erneut ausführen. Die beste Praxis hier ist also, ein Paket pro Zeile zu installieren, damit Sie von Dockers Cache profitieren können.
Halten Sie es außerdem einfach. Sie möchten das Tool "nur für den Fall" nicht installieren, da dies die Erstellungszeit und die Bildgröße erhöhen kann.
Wir werden auch unsere Anwendung in diesem Bild liefern. Benötigen Sie eine bestimmte Version von PHP, Ruby oder Python und einigen Modulen? Jetzt ist es an der Zeit, alle Programme und Laufzeiten zu liefern, die für die Bereitstellung der Anwendung benötigt werden.
Sie können nach Belieben angeben, da dieser Container nur so ausgelegt ist, dass Sie Ihre Anwendung ausführen:
In diesem Beispiel werden wir Python 3 zusammen mit Psycopg 2 (zur Verbindung zur Postgresql -Datenbank), dem Python -Schnurrbartmodul und dem YAML -Modul installieren. (Wenn Sie Ihre eigene Dockerfile erstellen, installieren Sie natürlich die spezifischen Abhängigkeiten, die Sie benötigen.)<code class="language-dockerfile"># 设置基础镜像 FROM debian:sid</code>
Kompilierung und Download -Paket
Sie können diese Datei sogar in einer separaten Datei einstellen, diese Datei zum Erstellen hinzufügen und ausführen, die wir im Abschnitt "Zustellung" in Ihrem eigenen Anwendungsbereich sehen werden.
Reinigung
aufzuräumen Beachten Sie auch, dass wir APT-Get verwenden, weil wir DEBIAN entschieden haben, aber bitte den entsprechenden Befehl zur Verteilung des Basisbildes verwenden.
<code class="language-dockerfile"># 作者 MAINTAINER Lucero del Alba</code>Liefern Sie Ihre eigene Anwendung
Der gesamte Zweck des Aufbaus dieser Umgebung besteht darin, dass Sie Ihre Bewerbung reibungslos liefern und sich bereit machen. Um den Inhalt von Dateien, Verzeichnissen und sogar Remote -URLs zum Bild hinzuzufügen, verwenden wir die Anweisung hinzufügen.
-Kontext einfügen. Um die Operationen zu vereinfachen, setzen wir alles in das oben erwähnte My_Build -Verzeichnis zusammen mit der Dockerfile selbst ein.
Angenommen, wir haben die App und alles, was wir in das Bild einfügen möchten
<code class="language-bash">mkdir ~/my_build cd ~/my_build touch Dockerfile</code>Wir fügen das .Bashrc- und .profile -Skripte zum / root -Verzeichnis im Container hinzu, damit sie ausgeführt werden, wenn wir die Shell im Container starten und den Inhalt der App / in das / App / -verzeichnis im Container kopieren.
wir fügen den folgenden Befehl hinzu:
<code class="language-dockerfile"># 设置基础镜像 FROM debian</code>Stellen Sie Ihre Umgebung
Viele von Ihnen verwenden den Standard-Debian-Charakter, der dies tun sollte, aber da wir auf eine internationale Zielgruppe abzielen, lassen Sie uns sehen, wie Sie ein UTF-8-Terminal haben. Wir haben das Ortspaket schon einmal installiert, sodass wir jetzt nur noch die Zeichensatz generieren und die entsprechende Linux -Umgebung einrichten:
<code class="language-dockerfile"># 设置基础镜像 FROM debian:sid</code>Sie müssen möglicherweise auch einige Umgebungsvariablen für die Anwendung festlegen, um Passwörter und Pfade auszutauschen. DockerFile bietet Env -Anweisungen, um dies genau zu tun:
<code class="language-dockerfile"># 作者 MAINTAINER Lucero del Alba</code>Beachten Sie, dass Sie beim Starten des Containers auch Umgebungsvariablen aus der Befehlszeile übergeben können. Dies ist möglicherweise geeignet, um einige vertrauliche Informationen (z. B. Passwörter) zu teilen.
Vollständige Dockerfile
Dies ist die vollständige Datei:
<code class="language-dockerfile"># 额外的元数据 LABEL version="1.0" LABEL description="First image with Dockerfile."</code>Erstellen Sie einen Spiegel
Dies erzeugt eine lange Ausgabe, bei der jeder "Schritt" eine Richtlinie in unserer Dockerfile ist. Hier ist eine verkürzte Ausgabe:
<code class="language-dockerfile"># 更新源列表 RUN apt-get clean RUN apt-get update</code>
Listen Sie den Spiegel
<code class="language-dockerfile"># 每行安装一个基本应用程序,以获得更好的缓存 RUN apt-get install -qy git RUN apt-get install -qy locales RUN apt-get install -qy nano RUN apt-get install -qy tmux RUN apt-get install -qy wget</code>auf
Dies gibt unsere neu erstellte My_image und andere grundlegende Bilder aus, die wir heruntergeladen haben:
<code class="language-dockerfile"># 安装应用程序运行时和模块 RUN apt-get install -qy python3 RUN apt-get install -qy python3-psycopg2 RUN apt-get install -qy python3-pystache RUN apt-get install -qy python3-yaml</code>
... das war's, unser Spiegel ist bereit, geliefert und rennen zu werden!
<code class="language-dockerfile"># 清理 RUN apt-get -qy autoremove</code>
Starten Sie den Container
Nächste Schritte
<code>.bashrc .profile app/app.py app/lib.py Dockerfile</code>
Wir werden diese in zukünftigen Artikeln vorstellen. Derzeit möchten Sie die folgenden Ressourcen überprüfen.
von der Docker -Website:
docerfile reference
dockerfile ist ein Textdokument, das alle Befehle enthält, die der Benutzer in der Befehlszeile aufrufen kann, um das Bild zusammenzustellen. Die Verwendung von DockerFile vereinfacht den Prozess des Erstellens von Bildern in Docker. Sie können den Prozess automatisieren, wodurch er effizienter und weniger anfällig für Fehler ist. DockerFile bietet auch klare Versionsdokumentationen zum Erstellen von Bildern, was es anderen Entwicklern erleichtert, Ihre Arbeit zu verstehen und zu verwenden oder zu ändern.
dockerfile bietet eine Vielzahl von Möglichkeiten, um den Build -Prozess zu optimieren. Eine der effektivsten Möglichkeiten ist die Verwendung mehrstufiger Builds. Auf diese Weise können Sie mehrere aus Anweisungen in Ihrer Dockerfile verwenden. Jeder von der Anweisung kann eine andere Grundlage verwenden, und jede Anweisung beginnt eine neue Bauphase. Sie können optional Artefakte von einer Stufe in eine andere kopieren und alles, was Sie nicht im endgültigen Bild erscheinen möchten.
Es gibt mehrere Best Practices für das Schreiben von Dockerfiles. Zunächst sollten Sie es vermeiden, unnötige Pakete zu installieren, um die Spiegelgröße klein zu halten. Zweitens verwenden Sie mehrstufige Builds, um den Build-Prozess zu optimieren. Drittens sollte jede Dockerfile eine einzige Anwendung darstellen. Wenn Sie mehrere Anwendungen haben, sollten Sie mehrere Dockerfiles verwenden. Schließlich sollten Sie die Datei .Dockerignore -Datei verwenden, um Dateien und Verzeichnisse auszuschließen, die nicht in das Bild enthalten sein sollten.
dockerfile kann debuggen werden, indem das Bild erstellt und mit dem Shell -Befehl ausgeführt wird. Wenn der Build fehlschlägt, gibt Docker eine Fehlermeldung zurück, mit der Sie das Problem identifizieren können. Sie können auch den Befehl Run verwenden, um Befehle auszuführen, die Ihnen helfen, Ihre Dockerfile zu debuggen.
Ja, Sie können Umgebungsvariablen in Ihrer Dockerfile verwenden. Die Env -Richtlinie legt die Umgebungsvariable für diesen Wert fest. Dieser Wert befindet sich in der Umgebung aller nachfolgenden Anweisungen in der Build -Phase und kann auch in vielen Anweisungen inline ersetzt werden.
Sie können mit der Kopieranweisung neue Dateien vom Host auf das Docker -Bild kopieren. Kopieren Sie Dateien aus der Quelle im Host zum Ziel im Docker -Bild.
Sie können die Expose -Anweisung verwenden, um den Docker -Container zu benachrichtigen, um zur Laufzeit auf einen bestimmten Netzwerkport zu hören. Dies veröffentlicht jedoch nicht den Port. Um einen Port zu veröffentlichen, müssen Sie das Flag -P -Flag für den Befehl Docker Run verwenden.
Sie können mit der WorkDir -Direktive das Arbeitsverzeichnis für einen nachfolgenden Lauf, CMD, Einstiegspunkt, Kopieren und Hinzufügen von Anweisungen in der Dockerfile verwenden.
Sie können mit der Run -Anweisung Befehle in einem Docker -Bild ausführen. Dadurch wird jeder Befehl in der neuen Ebene über dem aktuellen Bild ausgeführt und das Ergebnis eingereicht.
Sie können mit der CMD -Anweisung Standardwerte für den ausführenden Container bereitstellen. Diese können ausführbare Dateien enthalten, oder ausführbare Dateien können weggelassen werden. In diesem Fall müssen Sie die Eintragsrichtlinie angeben.
Diese überarbeitete Ausgabe behält die Originalbildformatierung bei und vermeidet signifikante Änderungen an der Bedeutung des Artikels, während Sätze und Absätze für Originalität umformulieren.
Das obige ist der detaillierte Inhalt vonSo erstellen Sie ein Bild mit der Dockerfile. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!