Wie Sie Ihre Anwendung Verpacken Infrastruktur mit Docker

0
33

Docker ist eine Art von Verpackung-Anwendungen und alle von Ihnen benötigten Abhängigkeiten und Konfiguration in einem einzigen Bild. Im wesentlichen dreht sich Ihre server-Konfiguration in etwas, die verwaltet werden können mit git und synchronisiert über jede Maschine.

Was Ist Docker, und Warum Ist Es Sinnvoll?

Docker macht es viel einfacher zu verwalten Ihre Produktion server-Konfiguration. Vielmehr als das einrichten von Servern manuell, können Sie automatisieren den gesamten Prozess zu sein, lief Sie beim erstellen der container-Bild.

Dieses Bild wird für alle gleich sein auf Ihr team, so werden Sie in der Lage, sofort führen Sie Ihre app mit allen benötigten Abhängigkeiten für Sie verwaltet. Dies behebt auch das klassische “es funktioniert nicht auf meinem Rechner-problem”, weil Docker-images laufen überall die gleiche.

Dieses Bild lässt sich auch leicht verteilt und liefen auf eine Flotte von Servern bei sehr wenig Leistungseinbußen. Da Docker ist nicht eine virtuelle Maschine, die Sie nicht haben, um mit dem overhead ausführen eines Gastbetriebssystems für jede Anwendung. Das macht Sie Billig und sehr skalierbar.

Für mehr Informationen über das, was Docker ist, und ob oder nicht, sollten Sie Sie verwenden für Ihre app können Sie Lesen Sie unsere Zusammenbruch von, ob oder nicht, es lohnt sich die Kopfschmerzen. Für jetzt, nehmen wir an, dass Sie bereit sind, um loszulegen, und Tauchen Sie ein in die technischen details.

Erstellen Sie ein Dockerfile

Der entrypoint für den Bau des Containers wird aufgerufen, ein Dockerfile. Erstellen Sie ein neues Projekt-Verzeichnis zu Haus Ihre Dateien, erstellen Sie dann eine neue Dockerfile einfach mit dem Namen Dockerfile ohne Erweiterung:

touch Dockerfile

Öffnen Sie diese Datei in Ihrem bevorzugten text-editor.

Sie wollen wahrscheinlich nicht zu starten, alles von Grund auf neu, so können Sie die Gabel ein vorhandenes image aus dem Docker Hub, wie Ubuntu:

VON ubuntu

Beachten Sie, dass selbst wenn Sie tun, werden Sie haben, machen Sie es VON Grund auf.

Während des build-Prozesses, Docker erstellt einen änderbaren “Schicht”, die man bauen kann auf der Oberseite. Sie erlaubt das kopieren von Dateien und ausführen von Befehlen, als wären Sie auf dem Rechner ausgeführt werden, in ähnlicher Weise, wie würden Sie gehen über das einrichten einer server manuell. Sie haben alle Ihre server-setup in der Datei, im wesentlichen die Automatisierung des Prozesses würden Sie gehen durch, wenn Sie schmiß eine leere Linux-box, und mir wurde gesagt, um es in die Produktion. Dies kann ein zeitaufwändiger Prozess sein.

Sie können ausführen dieser Befehle von der Befehlszeile aus, und legen Sie das Bild manuell. Wenn Sie möchten, um eine bash-shell in einem container, die Sie ausführen können:

docker exec -es <container> /bin/bash

Und speichern Sie Ihre änderungen mit:

docker commit <container> <name>

Allerdings sollten Sie nur verwenden, dies zum testen, und führen Sie alle Ihre aktuelle Konfiguration in einem Dockerfile.

Dockerfile Befehle

Wir gehen durch die meisten gängigen Befehle, und erklären Sie Ihre Verwendung und die best practices anwenden, um Ihnen. Für mehr erweiterte Referenz, konsultieren Sie bitte dieses cheatsheet, oder konsultieren Sie die “Best Practices Für das Schreiben von Dockerfiles” docs Eintrag.

KOPIEREN

Die COPY-Anweisung ist Recht einfach: Sie ermöglicht es Ihnen, füllen Sie das Andockfenster Bild mit Daten und Konfiguration.

COPY <Quelle> <Ziel>

Zum Beispiel, wenn Sie hatte einen Ordner in Ihrem Projekt-Verzeichnis /config/nginx/, die deine nginx.conf sites-available/ und andere Verzeichnisse, die Sie kopieren könnte, dass die Standard nginx config Lage im container:

KOPIEREN /config/nginx/ /etc/nginx/

Auf diese Weise können Sie halten all deine nginx config-Dateien im selben Projekt-Verzeichnis als alles andere, das heißt, Sie werden versioniert mit git neben dem rest des Codes.

LAUFEN

Die RUN-Anweisung führt einen Befehl in Ihrem container an und speichert die änderungen am container-Dateisystem.

Befehl AUSFÜHREN

Jeder run-Befehl erstellt eine neue “Schicht”, so dass Sie wahrscheinlich wollen, um komplizierte setup-innen ein install-Skript. Sie müssen kopieren Sie das script über das Bild, und führen Sie es:

KOPIEREN install.sh .
FÜHREN Sie ./install.sh

In diesem Skript, Sie sind frei zu tun, jede Konfiguration, die Sie benötigen, einschließlich der Installation von Programmen aus apt.

Wenn Sie möchten, zu schneiden nach unten auf Ihre container-build-Zeiten, können Sie eine Basis-container mit allen Programmen, die Sie benötigen, bereits installiert ist, erstellen Sie dann Ihre main-container AUS dem container, obwohl Sie müssen dann Abhängigkeiten verwalten und die Konfiguration getrennt.

CMD

CMD definiert die ausführbare Datei Ihres Containers auf Start, wenn nichts anderes angegeben ist. Dies ist, wie Sie Ihrer app laden sobald alles abgeschlossen ist.

CMD-ausführbare Datei

Nur die Letzte CMD-Befehl wirksam wird. Sie können das überschreiben der CMD beim Start mit der folgenden syntax:

docker container laufen ausführbar [args]

ENTRYPOINT

ENTRYPOINT ist eine spezielle version von CMD ermöglicht, dass die container zu laufen, als eine ausführbare Datei. Zum Beispiel, wenn alle die container nicht ausgeführt wird, nginx, können Sie angeben, nginx als ENTRYPOINT:

ENTRYPOINT nginx

Und dann führen Sie, dass die container auf der Kommandozeile auf und übergibt die Argumente als Argumente der entrypoint:

docker container laufen [args]

SETZEN

Aussetzen Marken bestimmte Behälter ports öffnen, um die auf dem host. Zum Beispiel, wenn Sie ein web-server läuft, möchten Sie wahrscheinlich

EXPOSE 80

Dies nicht binden den port automatisch, sondern es informiert die Docker-runtime, dass der port verfügbar ist. Tatsächlich binden Sie es aus, Sie werden wollen, verwenden Sie das flag “- P ” (Großbuchstaben), ohne Argumente zu binden, alle gefährdeten ports.

Läuft Ihre App

Zunächst werden Sie brauchen, um zu bauen Sie Ihr Bild:

docker build-t-container .

Sie können Ihre container mit docker run:

docker container laufen

Das ist allerdings nicht allzu nützlich auf seine eigene, becaue es gibt keine Möglichkeit mit ihm zu interagieren. Das zu tun, müssen Sie die bind-ports, die über das flag “- p”, etwa so:

docker run-p 3000:80 nginx

Dies läuft der nginx-container und bindet den container HTTP-Ausgabe auf port 3000 auf dem lokalen Rechner.

Jedoch, mit einem standard-setup Sie müssen den Wiederaufbau der Docker-container jedes mal, wenn Sie änderungen an Ihrer app. Dies ist natürlich weit weniger als ideal, aber zum Glück gibt es Möglichkeiten das zu umgehen. Eine Möglichkeit ist die Montage eines Volumen in die container zu bilden, die eine Echtzeit-Verbindung zwischen dem Behälter und dem host-OS (wo Sie tun Ihre Entwicklung). Zum Beispiel, wenn Sie Ihre HTML-Quelle im src/html/ Ordner von Ihrem Docker-Projekt-Verzeichnis, können Sie Sie mounten auf /usr/local/nginx/html/ mit:

docker run-p 80:80 -v -. /src/html/:/usr/local/nginx/html:ro-container

Die “ro” – flag sorgt diese Verbindung ist read-only, so dass die Docker-container sind keine änderungen an den host-Betriebssystem. Dies kann auch verwendet werden, für die Möglichkeit, Docker-Container Zugriff auf persistente Daten auf dem host-OS.