Composer und Bower via Docker so einrichten als wären sie nativ auf dem Mac installiert.
Ich brauche im Alltag sehr oft die Abhängigkeits-Management-Tools composer und bower. Zwar lassen sich diese auf dem Mac installieren, aber irgendwie ist es doch schöner nicht alles global in irgend einen bin ordner zu werfen.
Docker for Mac ist eine schöne Lösung für dieses Problem. Bis vor kurzem noch duch massive Performance-Probleme geplagt ist die Beta mit der :cached mount option inzwischen nutzbar. So kann man diese Befehle ausführen.
# für composer
docker run --rm -it -v "$(pwd):/app:cached" -w /app -v ~/.ssh:/root/.ssh -v /tmp:/tmp:cached composer
# für bower
docker run --rm -it -v "$(pwd):/app:cached" -w /app -v ~/.ssh:/root/.ssh digitallyseamless/nodejs-bower-grunt bower
Was mache ich genau?
--rmsorgt dafür das der container nach der ausführung entfernt wird.-it(ausgeschrieben--interactive --tty) damit potenzielle eingaben funktionieren wie bei symfony parameters.yml zum beispiel.-v "$(pwd):/app:cached"mounted den aktuellen Ordner in das/appVerzeichnis des Containers. Man beachte hier die:cachedOption welche erst seit Docker 2017-04-06-edge verfügbar ist. Es sollte aber auch mit älteren Verisonen funktionieren, wenn diese Option nicht übergeben wird.-w /appsorgt dafür, dass wir nach dem start auch in dem/appVerzeichnis sind.-v ~/.ssh:/root/.sshhohlt uns unsere ssh keys in den container. Dies ist wichtig wenn man von privaten repositories cloned. Hier hab ich die:cachedoption weg gelassen da hier io minimal sein dürfte. Dazu sei noch gesagt das dieser Mount mit den Vm-Implementationen (docker-toolbox) bei mir nicht funktioniert hat.-v /tmp:/tmp:cached(nur composer) Composer nutzt den tmp ordner als Cache. Außerdem wird hier dieauth.jsonabgelegt wenn composer über das github api limit geht. Hier erwarte ich wieder mehr io, weshalb ich:cachedwieder definiert habe.
Nun, dies auswendig jedes mal ein zu geben ist nicht ganz so leicht, daher hab ich mir diese Befehle als Alias in die ~/.bash_profile geschrieben.
alias composer='docker run --rm -it -v $(pwd):/app:cached -w /app -v ~/.ssh:/root/.ssh -v ~/.composer:/tmp/cached:cached composer'
alias bower='docker run --rm -it -v $(pwd):/app:cached -w /app -v ~/.ssh:/root/.ssh digitallyseamless/nodejs-bower-grunt bower'
So kann man nun composer und bower verwenden, als wären sie nativ installiert.
Linux nutzer müssten dies auch in die besser dafür geeignete ~/.bashrc schreiben können. Dort weiß ich allerdings nicht ob es nicht zu Rechteproblemen führen kann da der Befehl als root läuft und auch als 0 schreibt. Eventuell muss ich dann nochmal nachbessern.
Hier noch ein kleiner Bonus:
alias ponysay='docker run --interactive --rm mpepping/ponysay'
- edit vom 31 August 2017: Der cache ordner vom composer befindet sich nun in
/tmp/cache - edit vom 8 September 2017: Ich hab nun den gesamten
/tmpOrder für composer frei gegeben da dort auchauth.jsondrin liegt.