Ich bin neu bei Docker, ich komme von Vagrant.
Ich verwende Docker (1.9.1) in meinem Ordner "D: / Works / sound / DockerFirstTime".
Jetzt erstelle ich die Maschine mit
docker-machine create first
und einfach Dockerfile :
FROM ruby:2.2-onbuild
und einfach Gemfile :
%Vor%Jetzt mit diesem Befehl möchte ich einen freigegebenen Ordner wie in Vagrant auf der gleichen Festplatte meiner Dockerfile verwenden:
docker run -it -v //d/Works/something/DockerFirstTime:/usr/src/app -w /usr/src/app ruby:2.2 bundle install
Aber es funktioniert nicht.
Wie geht das?
Ich weiß, dass Docker nur den / c / Benutzer / Ordner teilt, stimmt das?
Wie kann ich den Ordner mit den Dateien verwenden und meine Dateien mit dem Editor in Windows ändern und dann den Server wie in einer normalen Shell auf einem einzelnen PC oder wie in Vagrant neu starten?
Diese Frage und Diese Frage hat ein ähnliches Grundproblem, indem Sie einen nicht C: / Laufwerk Ordner in boot2docker installieren. Ich habe eine ausführliche Antwort auf die andere Frage geschrieben, die die gleichen Informationen liefert wie in der ersten Hälfte von @ vonCs Antwort.
Von Docker Docs :
Alle anderen Pfade stammen vom Dateisystem Ihrer virtuellen Maschine. [...] Im Im Falle von VirtualBox müssen Sie den Host - Ordner als verfügbar machen freigegebener Ordner in VirtualBox. Dann können Sie es mit dem Docker montieren
-v
flag.
Dadurch wird Ihr gesamtes Laufwerk D: \ gemountet. Sie können einfach die Dateipfade ändern, um detaillierter und spezifischer zu sein.
Dies muss nur einmal durchgeführt werden.
In Windows CMD:
%Vor%Dies muss bei jedem Neustart der VM durchgeführt werden.
Im Boot2Docker-VM-Terminal:
%Vor%Quellen und eine Erklärung, wie das funktioniert, finden Sie unter meine vollständige Antwort auf die andere ähnliche Frage
Danach können Sie das Flag -v
/ --volume
in Docker verwenden, um diesen Ordner oder alle Unterordner oder Dateien in Container einzubinden. Wenn Sie Ihr gesamtes D: \ -Laufwerk gemountet haben, können Sie diesen exakten Docker-Run-Befehl von Ihrer Frage verwenden und es sollte nun funktionieren. Wenn Sie einen bestimmten Teil Ihres Laufwerks gemountet haben, müssen Sie die entsprechenden Pfade ändern.
Auch von Docker Docs :
Das Anhängen eines Host-Verzeichnisses kann zum Testen nützlich sein. Zum Beispiel, du kann Quellcode in einem Container bereitstellen. Dann ändern Sie den Quellcode und sehen Sie seine Auswirkung auf die Anwendung in Echtzeit.
Als freigegebenes VBox-Verzeichnis sollten Sie in der Lage sein, Änderungen zu sehen, die von der Windows-Seite gemacht wurden, die sich in boot2docker vm widerspiegelt.
Sie müssen möglicherweise Container neu starten, um zu sehen, dass die Änderungen tatsächlich angezeigt werden. Dies hängt davon ab, wie das Programm, das im Container ausgeführt wird, in Ihrem Fall Ruby, die Dateien verwendet. Wenn die Dateien beispielsweise beim Start des Containers in eine App kompiliert werden, müssen Sie den Container unbedingt neu starten, um die Änderungen zu sehen.
Achten Sie beim Schreiben von Dateien in Windows und beim Lesen in Linux darauf, dass die Zeilenenddifferenz zwischen CR LF und LF liegt. Stellen Sie sicher, dass Ihr Texteditor Dateien mit Unix-Zeilenenden speichert, oder Sie sehen möglicherweise Fehler, die durch '^ M' am Ende aller Ihrer Zeilen verursacht werden.
Ich weiß, dass Docker nur den Ordner / c / User / teilt, stimmt das?
Es tut es, und es ist in der Lage, dies zu tun, weil die VirtualBox-VM, die für die Bereitstellung eines Linux-Hosts für das Andockfenster verwendet wird, C: \ Benutzer freigibt.
Damit Docker einen anderen Ordner sehen kann, müssen Sie:
VBoxmanage sharedfolder add "VM name" --name "sharename" --hostpath "D:\Works"
mount /D/Works
innerhalb einer VM-Sitzung, wie in " freigegebenen Windows-Ordner (außer c / Benutzer /) mit Andockfenster Container (mithilfe des Andockfenster-Clients) "und in boot2docker :
Das Problem mit dieser letzten Alternative wird in " beschrieben Einführung in boot2docker "(scrollen Sie zum Abschnitt" Freigegebene Ordner ")
%Vor%Das Hauptproblem mit
vboxsf
ist, dass es keine Caching-Art von Caching durchführt, wenn Sie versuchen, eine große Menge kleiner Dateien (große GIT-Repos) oder irgendetwas, das Dateisystem ist, schwer zu lesen (grunt) ) Leistung wird ein Faktor.Die beste Lösung, die ich bis jetzt entwickelt habe, ist die Verwendung von vagrant mit einer angepassten Version von boot2docker mit aktivierter NFS-Unterstützung, die sehr wenig "hacken" hat, um zu funktionieren, was nett ist.
Und ein gutes Verkaufsargument für mich ist die Geschwindigkeitssteigerung durch die Verwendung von NFS anstelle von vboxsf, es ist eigentlich ziemlich atemberaubend.Dies ist das Projekt, das ich Ссылка verwendet habe.
In dieser Zeile befindet sich die magische Soße in der Volume-Freigabe.
Dies weist Vagrant an, Ihr aktuelles Verzeichnis mithilfe von NFS an die boot2docker-VM im Verzeichnis / vagrant weiterzugeben.
Dieses Projekt scheint jedoch ziemlich alt zu sein und müsste angepasst werden, um das neueste boot2docker.iso
(Docker 1.9.1) aufzunehmen.
Tags und Links docker docker-compose dockerfile boot2docker docker-machine