Mount-Verzeichnis im Container und teilen mit Host
Ich dachte, ich Verstand die docs, aber ich vielleicht nicht. Ich hatte den Eindruck, dass die -v /HOST/PATH:/CONTAINER/PATH
Kennzeichen ist bi-direktional. Wenn wir Datei oder Verzeichnisse in die container, Sie wäre gespiegelt auf dem host-geben uns die Möglichkeit, die Verzeichnise und Dateien auch nach der deinstallation ein docker-container.
In der offiziellen MySQL-docker-images, das funktioniert. Die /var/lib/mysql
gebunden werden können, um die host-und überleben neu gestartet und Ersatz der container unter Beibehaltung der Daten auf dem host.
Schrieb ich einen docker-Datei für sphinxsearch-2.2.9 nur als eine Praxis und zum Wohle von lernen und verstehen, hier ist es:
FROM debian
ENV SPHINX_VERSION=2.2.9-release
RUN apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -yqq\
build-essential\
wget\
curl\
mysql-client\
libmysql++-dev\
libmysqlclient15-dev\
checkinstall
RUN wget http://sphinxsearch.com/files/sphinx-${SPHINX_VERSION}.tar.gz && tar xzvf sphinx-${SPHINX_VERSION}.tar.gz && rm sphinx-${SPHINX_VERSION}.tar.gz
RUN cd sphinx-${SPHINX_VERSION} && ./configure --prefix=/usr/local/sphinx
EXPOSE 9306 9312
RUN cd sphinx-${SPHINX_VERSION} && make
RUN cd sphinx-${SPHINX_VERSION} && make install
RUN rm -rf sphinx-${SPHINX_VERSION}
VOLUME /usr/local/sphinx/etc
VOLUME /usr/local/sphinx/var
Sehr einfach und leicht um Ihren Kopf gewickelt, während Sie lernen. Ich bin die Zuordnung der /etc & /var Verzeichnisse von der sphinx zu bauen, um die VOLUME-Befehl zu denken, dass es mir erlauben wird, etwas zu tun, wie -v ~/dev/sphinx/etc:/usr/local/sphinx/etc -v ~/dev/sphinx/var:/usr/local/sphinx/var
, aber es ist nicht, stattdessen ist es ein überschreiben der Verzeichnisse in den container und lässt Sie leer. Wenn ich entfernen Sie die -v-Optionen und erstellen Sie den container, die Verzeichnisse zu den erwarteten Dateien und Sie werden nicht überschrieben.
Dies ist, was ich führen Sie zum erstellen der docker-Datei navigieren Sie zu dem Verzeichnis, das es in: docker build -t sphinxsearch .
Und sobald ich das habe, erstellte ich Folgendes tun, um einen container erstellen, basierend auf, dass Bild: docker run -it --hostname some-sphinx --name some-sphinx --volume ~/dev/docker/some-sphinx/etc:/usr/local/sphinx/etc -d sphinxsearch
Ich würde wirklich zu schätzen jede Hilfe und Einsicht, wie diese zu arbeiten. Ich schaute auf die MySQL-Bilder und sehe nichts Magisches, das Sie haben, um das Verzeichnis gebunden werden, Sie verwendeten LAUTSTÄRKE.
Vielen Dank im Voraus.
- Sie erkennen, dass im Dockerfile", BAND /usr/local/sphinx/etc." ist nicht das gleiche wie docker run-v /usr/local/sphinx/etc:/usr/local/sphinx/etc." nicht wahr? Der ehemalige umgeht die layered filesystem, die später ordnet Sie in einen Pfad Ihrer Wahl auf dem host. Oft werden beide zusammen verwendet werden.
- Ja, ich war sich dessen bewusst. Ich wollte den Zugriff auf die Verzeichnisse aus dem container, so kann ich die Daten auf dem host. Das war die einzige Möglichkeit, die ich denken konnte, wie es zu tun. Ich gebucht auf der docker-Foren und bekam keine Hilfe oder Beratung, dies war das Ergebnis von spielen, um mit ihm und suchen bei unzähligen Beispiele.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach unzähligen Stunden der Forschung, habe ich beschlossen, mein image mit dem folgenden Dockerfile:
Erweitern Sie profitierte es mich, dass ich nicht haben, zu bauen das gesamte Bild von vorne als ich wurde getestet, und nur die Gebäude, die Teile, die relevant sind.
Erstellte ich eine ENTRYPOINT zum ausführen eines bash-Skript würde kopieren Sie die Dateien zurück an das gewünschte Ziel für die sphinx, um richtig zu starten, hier ist, dass code:
Zugang zu der /etc & /var Verzeichnisse auf dem host erlaubt mir, passen Sie die Dateien, während Sie erhalten die auf dem host-zwischen Neustart und so weiter... ich habe auch die gespeicherten Daten auf dem host, die überleben sollten, die neu gestartet wird.
Ich weiß, es ist ein diskutiertes Thema auf Daten-Container vs. speichern auf dem host, in diesem Augenblick, ich bin Neigung in Richtung einer Speicherung auf dem host, sondern versuchen die andere Methode später. Wenn jemand irgendwelche Tipps, Ratschläge, etc... zu verbessern, was ich habe oder einen besseren Weg, bitte teilen.
Danke @h3nrik für die Anregungen und für die Hilfe!
Montage-container-Verzeichnisse auf dem host ist gegen die docker-Konzepte. Brechen würde, dass die Prozess - /Ressourcen-encapsulation-Prinzip.
Anders herum - Montage eines host-Ordner in einen container möglich ist. Aber ich würde eher empfehlen Volumen Behälter, statt.
/var/lib/mysql
mit:docker run -it --name mysqldata -v /var/lib/mysql mysql /bin/true
. Dann link zu Ihrer mysql-Dienst container über:docker run -d --name mysqlserver --volumes-from mysqldata mysql
.docker run -d -v /config/directory:/server/config/directory:ro ...
. Sogar einzelne config-Dateien gebunden werden kann über:docker run -d -v /config/file.cnf:/server/config/file.cnf:ro ...
/etc
oder ähnliches. Das würde verstecken alle bisher vorhandenen Konfigurations-Dateien. Verwenden Sie stattdessen den beschriebenen einzigen Datei mounten-wo möglich-wenn Sie möchten, stellen nur eine kleine Teilmenge der Dateien in die/etc
- Verzeichnis.