2016-08-01 11 views
0

Ich habe ein Bild (nicht Container), die Daten in at/Store gebacken hat. Das Bild tut nichts anderes, es ist nur ein Gefäß, in dem die Daten gespeichert werden. Ich möchte eine Docker-Datei erstellen, so dass mein Nginx-Container Zugriff auf alles im/Store unter/usr/share/nginx/htmlSo erstellen Sie Datenvolumen aus Bild für den Einsatz in Nginx-Container

hat

Muss ich zuerst einen Zwischenbehälter herstellen? Ich bin mir nicht sicher, wie die Docker-Compose-Datei aussehen würde. Dank

Antwort

1

Der beste Weg für die Verwaltung, die ein Docker Volumen wahrscheinlich tun verwenden würde, du bist/Speicher-Daten zu speichern. Sie können dies tun, indem Sie einen Container aus diesem Image erstellen, ein leeres Andock-Volume darin einbinden und dann den Inhalt von/store in das externe Andock-Volume kopieren.

Wenn Sie noch den/Speicher aus einem vorhandenen Bild verwenden müssen, müssen Sie einen Container instanziiert aus, wenn und die freigelegte Volumen von Ihrem nginx Container abrufen. (mit volume_from). In diesem Fall müssten beide Container auf demselben Host sein.

+0

danke, aber wie soll ich angeben, dass/store unter/usr/share/nginx/html im Nginx-Container gemountet werden sollte? – Zuriar

+0

Wenn Sie die Daten wirklich aus dem Image lesen müssen (und nicht von einem extern gespeicherten Docker-Volume), und Sie einen anderen Pfad beibehalten müssen, können Sie in Ihrem Container mounten/speichern und einen Symlink von/usr/share erstellen/nginx/html zu/speichern in Ihrem Nginx-Container beim Start –

0

könnten Sie versuchen, die local-persist volume plugin wie folgt verwendet:

version: '2' 
services: 
    web: 
    image: nginx 
    volumes: 
     - data:/usr/share/nginx/html 
volumes: 
    data: 
    driver: local-persist 
    driver_opts: 
     mountpoint: /data/local-persist/data 

Offensichtlich andere Volumen Plugin-Typen könnten mehr Flexibilität bieten.

https://docs.docker.com/engine/extend/plugins/

0

Ich würde vorschlagen, Sie backen /store in Ihrem nginx Behälter zu berücksichtigen. Es reduziert die Anzahl der montierten Volumes und vereinfacht somit die Gesamtstruktur. Und vielleicht verbessert sich die Leistung.

Man könnte es mehrere Möglichkeiten:

  1. Verwenden Sie Bilddaten als Basis für Ihren nginx Bild. In diesem Fall müssen Sie Dockerfile für nginx schreiben, aber es ist nicht sehr schwierig.

  2. Sie können /store aus Ihrem Datenabbild extrahieren, indem Sie einen Container mit true Endpunkt und docker cp gewünschten Daten erstellen. Dann kopiere es auf dein nginx-Bild.

2

Dies ist ein kurzer Schritt-Prozess:

docker run -v nginx-store:/store --rm store true 

docker run -v nginx-store:/usr/share/nginx/html -d --name nginx nginx 

Der erste Lauf erzeugt ein benanntes Volumen nginx-store aus dem Inhalt Ihres store Bild (dies geschieht jedes Mal, wenn Sie ein leeres Volumen in einem Behälter montieren) und beendet den Container sofort und löscht ihn.

Der zweite Lauf verwendet das benannte Volume mit den zukünftigen nginx-Containern. Um das nginx-store Volume in der Zukunft zu ändern, können Sie jeden Seitencontainer ausführen, der es mit einem ähnlichen -v nginx-store:/target-Flag einbindet.

+0

Kein Kommentar zu Ihrer Antwort, sondern nur zu Docker Volumes im Allgemeinen ... Der Unterschied im Verhalten zwischen dem ersten und zweiten Befehl bringt mich zum Erbrechen.Was, wenn ich * ein * leeres Volumen verwenden möchte? Ich würde erwarten, ein leeres '/ store' im Container auf dem ersten Befehl wirklich zu sehen. – gertvdijk