Docker kennenlernen
Wir möchten gerne docker
etwas kennenlernen/ausprobieren/testen.
docker
bietet ein Framework zur Verwaltung von "Containern". Applikationen können dann in diesen Containern mit einer isolierten Umgebung laufen.
Referenzen:
- docker Webseite: https://www.docker.com/
- Wikipedia: http://de.wikipedia.org/wiki/Docker_(Software)
Produktiver Einsatz in der Revamp für isolierte Webapplikationen:
Siehe auch: Intern:Docker
Docker wird im prod. Einsatz extrem kompliziert/aufwändig, daher IMHO zur Zeit nicht das richtige für uns.
E.g.:
- es muss für jede Webapp ein Container mit Webserver etc. eingerichtet werden
- es braucht einen Reverse-Proxy um den Zugriff an die einzelnen Container zu verteilen
- grundsätzlich sind Container nicht für beständige Daten gedacht, d.h. diese müssen separat Verwaltet werden
- ("ausgelagerte" Verzeichnisse oder spezielle Daten-und Datenbank-Container etc.)
- Backup muss von einzelnen Containern bzw. deren Daten gemacht werden
- zusätzlich zu den Webapps in den Containern müssen alle Container selbst geupdated, verwaltet, überwacht werden usw. usf.
- die Webapps selbst sollten abgesichert werden anstatt docker dafür zu verwenden
- es sollte ein fester Workflow für development, testing und deployment definiert und eingehalten werden, was aber schwierig/suboptimal ist, da auch jeder Entwickler wieder anders arbeitet
Siehe dazu auch:
- https://valdhaus.co/writings/docker-misconceptions/
- http://www.powpark.com/blog/programming/2014/01/29/integrating-docker-with-jenkins-for-ruby-on-rails-app
- https://www.andreas-jung.com/contents/the-case-against-docker
- http://robertgreiner.com/2015/10/example-docker-deployment-pipeline/
- http://oskarhane.com/haproxy-as-a-static-reverse-proxy-for-docker-containers/
- http://oskarhane.com/nginx-as-a-reverse-proxy-in-front-of-your-docker-containers/
- http://anandmanisankar.com/posts/docker-container-nginx-node-redis-example/
- https://www.amon.cx/blog/docker-in-production-for-the-average-devops/
- https://t37.net/is-docker-ready-for-production-feedbacks-of-a-2-weeks-hands-on.html
- https://www.codeschool.com/blog/2015/01/16/production-deployment-docker/
- http://www.luiselizondo.net/2015-03-19/a-production-ready-docker-workflow/ (part 1 of 4, realistic/use case comparable to us/revamp-it!)
Installation
Referenz:
- Debian Wiki: https://wiki.debian.org/Docker
- docker Docs: http://docs.docker.com/installation/debian/#debian-wheezystable-7x-64-bit
docker
soll zukünftig im jessie-backports Repository verwaltet werden. Da der Release Cycle von docker
zu schnell ist für stable. Siehe dazu: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=781554
Leider ist zur Zeit (2015-06-09) docker dort nicht zu finden. Die Anleitung unter docker/Docs ist somit schlichtweg falsch.
Siehe dazu: https://github.com/docker/docker/pull/13104 Sowie: https://github.com/docker/docker/issues/12861
Glücklicherweise bietet Anscheinend docker
ein eigenes Ubuntu Repository, welches auch für Debian funktionieren soll. Siehe auch letzer obiger Link.
Die einfachste Art dieses zu nutzen scheint ein Script zu sein, welches über https://get.docker.com/ erhältlich ist.
Dieses trägt die Repositories ein und installiert docker.
Siehe: http://linuxconfig.org/package-docker-io-has-no-installation-candidate-debian-jessie
(Bei uns auf pingu-devel.)
$ sudo apt-get install curl $ curl -sSL https://get.docker.com/ | sudo sh
Benutzung als nicht-root erlauben
Benutzer zur Gruppe docker
hinzufügen.
(Innerhalb von docker haben diese Benutzer volle Rechte.)
Benutzung
Erstellen eines neuen image (debian)
Referenz: - https://docs.docker.com/articles/baseimages/
debootstrap
installiert.
Ein chroot erstellen:
$ sudo debootstrap jessie jessie
Davon ein tar Archiv erzeugen:
$ sudo tar -C jessie-minbase/ -cf jessie-minbase.tar .
Dieses in docker importieren:
$ cat jessie-minbase.tar | docker import - jessie-minbase_cem:init
Referenz: - https://docs.docker.com/userguide/dockerizing/
Vorhandene images auflisten:
$ docker images
Container
Anwendungen werden innerhalb von Containern ausgeführt.
"images sind die 'Quelle' für Container."
Einen Befehl im Container ausführen:
$ docker run jessie-minbase_cem:init echo 'Hello World'
Wenn der Befehl ausgeführt wurde, wird der Container gestoppt.
Der Container sowie Änderungen darin bleiben aber anscheinend "erhalten".
Soweit ich verstehe ist docker create ..
gleichwertig zu docker run
. Die Container werden einfach nicht gleich ausgeführt, sondern lediglich vorbereitet. Diese können dann später mit docker start ..
gestartet werden.
Alle Container anzeigen:
$ docker ps -a
-a
alle (auch gestoppte)
Ein gestoppter Container kann erneut gestartet werden:
$ docker start -a <container_name/id>
-a
STDOUT und STDERR anbinden
Oder den Container löschen (endgültig):
$ docker rm <container_name/id>
Mit docker commit ..
können änderungen am Container in ein image übernommen werden. Es wird eine neue "Version" des image erzeugt.