2016-07-26 7 views
2

Die Vagrant-Dokumentation beschreibt, wie Sie eine VM starten, die Docker as provider sowie how to provision a VM using Docker verwendet. Es gibt jedoch keine Informationen darüber, ob es möglich ist, beide kombiniert zu verwenden.Ist es möglich, Vagrant mit Docker als Anbieter UND Provider zu betreiben?

Der Grund, warum ich das tun möchte, ist, weil ich eine Python-Webanwendung entwickle, die sowieso über Docker bereitgestellt wird. Es enthält einige Abhängigkeiten (System- und Python-Bibliotheken, die über eine Docker-Datei installiert werden) sowie eine Redis-Datenbank, die in einem anderen Container ausgeführt wird.

Wenn ich jetzt eine Vagrant VM mit Docker Provider basierte auf meinem Python/Webapp Dockerfile und Bereitstellung dieser Maschine mit weiteren Behältern (zB Redis) schaffen könnte, dann

  • Ich würde eine VM, die sehr schnell ist meine Implementierungsumgebung drehen und ahmt nach wie vor fast perfekt,
  • ich PyCharm IDE's remote interpreter functionality auf die Python-Interpreter in dieser Maschine und profitiert von Codevervollständigung, Fehlersuche usw.

Damit dies funktioniert die Verbindung nutzen könnte, Man würde wahrscheinlich so etwas wie Docker in Docker benötigen, damit die Docker-basierte VM mehr Container über den Docker Provisioner hochfahren kann.

Ist diese Vorgehensweise generell möglich oder gibt es irgendwo ein funktionsfähiges Beispiel? Oder wenn nicht, was könnte eine gute Alternative sein, um dasselbe zu erreichen?

+0

Sie möchten eine VM, die Docker läuft? – CMPS

Antwort

0

Ist es möglich, Vagrant mit Docker als Provider UND Provider zu betreiben?

Ja, Sie können - ich habe nicht mit der neuesten Version vagrant prüfen, aber dies funktionierte bis vagrant 1.8.1

Was Sie wollen, ist im Grunde eine VM (Ubuntu oder coreOS drehen, wenn Sie möchten schnell drehen und minimal laufen lassen) mehrere Docker-Container ausführen.

Wenn Sie den vagrant docker provider ausführen, können Sie immer noch Ihre eigene Vagrantfile verwalten.

so müssen Sie die Haupt Vagrantfile (in der Regel als die Wurzel des Projekts sitzen)

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    ... 
    config.vm.provider "docker" do |docker| 
    docker.vagrant_vagrantfile = "host/Vagrantfile" 
    end 
    ... 
end 

und dann in Ihrem host/Vagrantfile Sie wäre so etwas wie

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

# Create and configure the VM(s) 
Vagrant.configure(2) do |config| 

    config.vm.hostname = "docker-host" 

    # Spin up your own box (or one from Atlas) 
    # and then provision it with Docker 
    config.vm.box = "ubuntu/trusty64" 
    config.vm.provision "docker" 

    ... 
end 

haben Dies ist ein weiterer typischer Vagrantfile die zeigt auf die Box, die gesponnen werden soll (es kann ubuntu, centos oder coreOS sein, wenn Sie ein minimales Betriebssystem haben wollen) und docker (docker installieren, falls es nicht auf der Box installiert ist), damit Docker von Ihrer VM verfügbar ist.

ok so in diesem Stadium haben Sie eine VM mit docker Anbieter, der auf eine VM verweist, die Docker bereitstellen. Jetzt wollen Sie Ihre 2 Container

In Ihrem Haupt Vagrantfile Setup fügt Sie die 2 Behälter, so etwas wie

# -*- mode: ruby -*- 
# vi: set ft=ruby : 

Vagrant.configure(2) do |config| 
    ... 
    config.vm.provider "docker" do |docker| 
    docker.vagrant_vagrantfile = "host/Vagrantfile" 
    end 
    ... 
    config.vm.define "python" do |python| 
    python.vm.provider "docker" do |docker| 
     ... 
     docker.image = "xxx" 
     docker.ports = [80:80] 
     docker.name = "python-system" 
    end 
    end 
    config.vm.define "redis" do |redis| 
    redis.vm.provider "docker" do |docker| 
     ... 
     docker.image = "xxx" 
     docker.ports = [80:80] 
     docker.name = "redis" 
    end 
    end 
end 

Dies wird Ihre 2 Docker Anbieter/Container Python und redis spin up.