2017-02-21 4 views
0

Ich arbeite an einem Docker-basierten Setup für eine einfache Web-App, die in Nginx + php-fpm läuft. Der übliche Vorschlag zum Speichern des eigentlichen PHP-Codes besteht darin, ihn auf dem Host zu speichern und dann schreibgeschützt in den Nginx- und PHP-Containern bereitzustellen.Gemeinsames, ephemeres schreibgeschütztes Docker-Volume

Ich möchte jedoch, dass mein Setup in sich abgeschlossen ist, damit ich es problemlos auf Amazon ECS mit Auto Scaling verwenden kann. Mit anderen Worten, ich möchte den Code irgendwie bündeln, anstatt ihn vom Host zu holen.

So scheint es, was ich will, ist ein schreibgeschütztes Volume, das zwischen zwei Docker-Containern geteilt werden kann und wird nicht bestehen, nachdem diese Container zerstört werden. Ist das möglich? Oder gibt es einen besseren Ansatz?

Antwort

1

Docker-Images können Volumes enthalten, die bereits mit Daten gefüllt sind. Um dies zu erreichen, füllen Sie zunächst in Dockerfile das Verzeichnis (z. B. mit COPY oder RUN) und deklarieren Sie es dann als Volume. Auf diese Weise können Sie ein Bild erstellen, die Ihren Code in einem Volumen-Anwendung enthält:

FROM php:7-fpm 

COPY ./app /var/www/html 
VOLUME /var/www/html 

einen neuen Container aus diesem Bild erstellen ein neues Volume erstellen, initialisieren sie mit den Daten aus dem /var/www/html Verzeichnis des Bildes und montieren im Inneren Ihr neuer Container am selben Ort.

Vergleichen the documentation für weitere Informationen:

Die Andockfensters Startbefehl initialisiert das neu mit beliebigen Daten erstellt Volumen, das innerhalb des Basisbildes an der angegebenen Position vorhanden ist. Betrachten wir zum Beispiel die folgende Dockerfile Schnipsel:

FROM ubuntu 
RUN mkdir /myvol 
RUN echo "hello world" > /myvol/greeting 
VOLUME /myvol 

Diese Dockerfile führt zu einem Bild, das docker run verursacht, eine neue Mount-Punkt an /myvol und kopieren Sie die Datei greeting in das neu erstellte Volume zu erstellen.

Auf diese Weise können Sie einfach mit docker run Ihre Anwendung Bild starten:

docker run -d --name app my_application_image 

Dann können Sie führen Sie Ihre Nginx Container und konfigurieren Sie die gleichen Mengen wie Ihre Anwendung Behälter verwenden, um die --volumes-from Flag verwendet:

Danach haben Sie ein Docker-Volume, das Ihren Anwendungscode enthält, der in beiden Containern unterbereitgestellt wird.

+0

Aber deckt dies den "ephemeren" Teil meiner Frage ab? Nach meinem Verständnis würde diese Methode verwaiste Volumes nach der Beendigung meiner Container verlassen, was ich zu vermeiden hoffte. – phu

+0

Die Volumes des Containers sollten zusammen mit dem Container gelöscht werden, zumindest wenn das Flag ['--volumes' oder' -v' verwendet wird (https://docs.docker.com/engine/reference/commandline/rm/#). /Optionen). – helmbert

Verwandte Themen