Damit kann ich z.B. auf einem Linux ein Windows starten. Für Docker heißt das momentan das auf einem Linux nur Linux Container verwalten und laufen lassen kann. Ein Vorteil ist dadurch das man weniger Overhead zum Hostsystem hat und sich diese libs und Daten teilen können.
Mit diesen einen Vorteil im Hinterkopf möchte man natürlich Docker nutzen wenn man eh schon auf einem Unix System entwickelt. Wie fängt man jedoch an? Für Ubuntu:
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
Testen kann man die Installation mit:
$ sudo docker run -i -t ubuntu /bin/bash
Damit wird die ‘ubuntu’ image heruntergeladen und ein Terminal geöffnet. Der erste Start dauert wegen des herunterladen des Images aber schon beim zweiten ausführen merkt man wie schnell ein docker container starten kann (dies kann man mit einer virtual machine leider nicht erreichen). Da wir alle nicht viel Zeit haben außer an Weihnachten ;-) würde ich euch empfehlen erstmal das Tutorial unter https://www.docker.com/tryit/ durchzulaufen. Das erklärt euch kurz,interaktiv und knapp die wichtigsten Befehle um mit Docker durchzustarten. Nun seid ihr bestimmt schon heiß drauf mysql/nginx/percona/apache zu installieren. Bevor ihr jedoch den ganzen Tag verbringt ein Setup zu erstellen könnt ihr unter https://registry.hub.docker.com/ schauen ob nicht jemand schon was aktuelles gebastelt hat. Natürlich finden man dort alte Bekannte wieder wie nginx (https://registry.hub.docker.com//nginx/) oder mysql (https://registry.hub.docker.com//mysql/) damit hat man in 5 Minuten sein Setup fertig (Bandbreite vorrausgesetzt). Ein wichtiger Aspekt den ich hier erwähnen möchte ist wenn man ein Image startet dort Änderungen macht und den Container wieder stop und dann wieder startet sind die Daten weg! Dies kann man verhindern indem man z.B. den mysql data Ordner auf das Hostsystem verlinkt.
docker run -d -v /path/in/host:/var/lib/mysql foo/bar
Somit kann man im Container eine Magento Datenbank importieren und diese bleibt dann persistent. Das muss man natürlich nicht machen und würde beim testen (behat, phpunit) hinderlich sein. Nun hat man natürlich damit als Team noch nix gewonnen wenn z.B. jeder seine mysql datenbank auf dem Rechner laufen lässt. Ich habe öfters mit größeren Datenbanken zu tun und allein der import dauert immer ewig :-( und das bei jedem Kollegen. Nicht auszudenken wenn man sich diese Datenbank auch noch kaputt spielt ;-) Daher hat Docker an uns gedacht und Data Container bereitgestellt. Diese Data Container enthalten wie der Name schon sagt nur die Daten. Das gute an den Containern ist das man verschiedene Versionen erstellen kann und auch Tags einsetzen kann. Das heißt am Ende importiert nur ein Entwickler einmalig die Daten und stellt allen anderen Entwicklern den Data Container zur Verfügung. Jeder Entwickler startet dann z.B. sein MySQL Container und gibt den Data Container einfach an:
docker run -d --volumes-from db_vol -p 3306:3306 foo/bar
Das coole an der Geschichte ist das ich mir innerhalb Sekunden dann eine frische Datenbank einrichten kann ! Nie wieder warten (Downloadzeit nicht inbegriffen ;-) )
Natürlich das das nur ein Weg wie man sich im Team etwas besser strukturieren kann, aber es ist ein schneller. Man kann mit Docker noch viel mehr anstellen was den Blogeintrag hier sprengen würde dennoch möchte ich noch auf drei Dinge verweisen.
- Magento 1 Images gibt es unter https://github.com/kojiromike/docker-magento (sehr abstrakte Lösung siehe github) https://github.com/alankent/docker-magento-ce (kein gelungenes Image da fast über 2 GB)
- Magento 2 Image https://github.com/alankent/docker-magento2-demo-apache
- Es sollte bald ein Video von der MMPL14 zu dem Thema geben.