Ist das ein guter Ansatz?
Ja, zumindest funktioniert es seit ein paar Monaten für mich.
Der Unterschied ist, dass ich auch eine docker-compose.yml
-Datei haben.
In meinem Vagrantfile
gibt es einen ersten Bereitstellungsabschnitt, der Docker installiert, pip und Docker-compose:
config.vm.provision "shell", inline: <<-SCRIPT
if ! type docker >/dev/null; then
echo -e "\n\n========= installing docker..."
curl -sL https://get.docker.io/ | sh
echo -e "\n\n========= installing docker bash completion..."
curl -sL https://raw.githubusercontent.com/dotcloud/docker/master/contrib/completion/bash/docker > /etc/bash_completion.d/docker
adduser vagrant docker
fi
if ! type pip >/dev/null; then
echo -e "\n\n========= installing pip..."
curl -sk https://bootstrap.pypa.io/get-pip.py | python
fi
if ! type docker-compose >/dev/null; then
echo -e "\n\n========= installing docker-compose..."
pip install -U docker-compose
echo -e "\n\n========= installing docker-compose command completion..."
curl -sL https://raw.githubusercontent.com/docker/compose/$(docker-compose --version | awk 'NR==1{print $NF}')/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
fi
SCRIPT
und schließlich ein Provisioning-Abschnitt, der Docker-compose feuert:
config.vm.provision "shell", inline: <<-SCRIPT
cd /vagrant
docker-compose up -d
SCRIPT
Es gibt other ways zu bauen und docker-Container von vagabundierendem zu starten, aber mit docker-compose ermöglicht es mir, jeden docker externalisieren Besonderheiten aus meiner Vagrantfile. Dadurch kann diese Vagrant-Datei für andere Projekte ohne Änderungen wiederverwendet werden; Sie müssten nur eine andere docker-compose.yml
Datei bereitstellen.
Eine andere Sache, die ich anders mache, ist die Vagrantfile
an der Wurzel Ihres Projekts (und nicht in einem Verzeichnis vagrant
), da es ein Ort ist Menschen und Werkzeuge (einige IDE) erwarten, es zu finden. PyCharm macht es, PhpStorm wahrscheinlich.
Ich legte meine docker-compose.yml
Datei an der Wurzel meiner Projekte auch.
Am Ende, für die Entwicklung gehe ich einfach zu meinem Projekt-Verzeichnis und fire vagrant, die docker-compose (schließlich bauen dann) die Docker-Container ausführen.
Ich versuche immer noch herauszufinden, wie dies in Bezug auf die Bereitstellung der Produktion arbeiten.
Für die Produktion bereitstellen, ist eine gängige Praxis, um Ihre Docker Bilder an das ops Team zu schaffen, indem sie auf eine privatendocker registry veröffentlichen.Sie können entweder eine solche Registrierung in Ihrer eigenen Infrastruktur hosten oder Online-Dienste verwenden, die sie bereitstellen, wie beispielsweise Docker Hub.
Geben Sie dem ops-Team auch eine docker-compose.yml
-Datei, die definiert, wie die Container ausgeführt und verknüpft werden. Beachten Sie, dass diese Datei die Anweisung build:
nicht verwenden sollte, sondern sich stattdessen auf die Anweisung image:
bezieht. Wer möchte während der Bereitstellung in der Produktion Komponenten erstellen/kompilieren?
Diese Docker blog article kann helfen herauszufinden, wie docker-compose und docker-swarm zur Bereitstellung auf einem Cluster verwendet werden.
Große Antwort, vielen Dank. Nur eine kleine Extra-Frage: Verwenden Sie in Vagrant eine Box oder den Docker-Provider? – antonienko
Ich benutze die 'phusion/ubuntu-14.04-amd64' Box. Ich versuchte den Landstreicher, aber ich war nicht zufrieden mit dem Ergebnis. Es war Monate her, vielleicht funktioniert es jetzt besser, aber mit einem Box + Provisioning-Andockfenster haben Sie die Kontrolle. Meine Vagrantfile ist verfügbar unter https://github.com/thomasleveil/vagrant-phusion-docker/blob/master/Vagrantfile – Thomasleveil