Docker kennenlernen

Aus revampedia

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:

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:


Installation

Referenz:

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.