netzkompetenz

Snippets, Tipps und Tricks rund um Webprogrammierung der taywa gmbh aus Zürich

Setup Tipps und Tricks für Docker

Meist programmiere ich in python und javascript (plus ein paar golang Experimente). Für die lokale Entwicklung benutzte ich bis jetzt virtualenv, macports und vagrant (für komplexere Projekte).

Ein Projekt benötige mehrere virtuelle Maschinen, um es vernünftig testen zu können. Mir graute es schon davor mehrere vagrant Maschinen gleichzeitig laufen zu lassen. Das jährliche OS X Update stand vor der Tür, somit ein idealer Zeitpunkt was neues auszuprobieren, da ich sowieso alles neu installieren wollte.

Ich entschied mich dazu virtualenv, macports, vagrant mit docker zu ersetzen (virtualenv hat in docker überlebt…).

English version of this post is here.

Docker installieren

Auf www.docker.com gehen und das entsprechende Tutorial für das entsprechende OS durchführen. Unter Mac/Windows wird eine virtuelle Maschine benötigt, dies funktioniert mit boot2docker (virtualbox). Bei Linux ist es einfacher, da docker eine Linux Technologie ist. Hier wird die Vorgehensweise für OS X beschrieben. Viele Tipps und Tricks sind aber auch auf Linux anwendbar.

 

Nach der Installation für OS X muss man  boot2docker init ausführen.

btrfs

Docker benutzt AUFS als default. Seit 0.8 (0.10 stable) kann auch btrfs verwendet werden. Btrfs hat einige interessante Features. Bis jetzt habe ich Btrfs noch nie auf einem Server eingesetzt, wollte es aber schon lange mal ausprobieren.

Btrfs unterstützt Komprimierung im Filesystem, das ist sehr nützlich auf einem Laptop mit einer SSD.

In VMs können virtuelle dynamische Disks nur automatisch wachsen, kleiner werden sie leider nicht automatisch, wenn Platz frei wird. Vor dem kleiner machen einer virtuellen Disk, muss man Nullen in den freien Platz schreiben. Insbesondere für SSD ist dies nicht zu empfehlen da dieses limitierte Schreibzyklen haben.

Eine alternative ist die Disk zu kopieren und dann die alte Kopie zu löschen. Mit dem clonezilla iso image geht dies einfach von der Hand. Clonezilla unterstützt btrfs, da native im Linux Kernel vorhanden, aber nicht AUFS. Siehe auch boot2docker WORKAROUNDS.md.

Das Lifecycle Management der virtuellen Docker Maschine wird so einfacher.

btrfs Optionen permanten setzen

Da boot2docker ein iso image ist kann man nichts in diesem Image verändern. Im File /mnt/sda1/var/lib/boot2docker/bootlocal.sh kann man eigene Modifikation anbringen da dies die docker Daten Disk ist.

Hier mein /mnt/sda1/var/lib/boot2docker/bootlocal.sh file:

Performance Probleme

Anfangs hat ich sehr komische CPU Performance Probleme unter docker. Als ich die virtualbox Einstellungen auf 1 anstatt 2 CPUs geändert habe, ging es wesentlich schneller. Jetzt scheint das Problem aber nicht mehr zu bestehen.

Ein paar nützliche Shell Funktionen

Die folgenden Snippets kommen ins lokale .profile file.

Die Variablen DOCKER_HOSTIP und DOCKER_GATEWAYIP können hilfreich sein.

In einen docker container „reingehen“

Seit docker 1.3 gibt es das exec sub command. Vorher konnte man das externe tool nsenter benutzten. Damit braucht es keine ssh um ein Terminal in einem Container laufen zu lassen. Mit dieser Shell Funktion geht dies noch etwas einfacher.

Jetzt einfach docker-enter mycontainer_1 ausführen um in den container zu kommen.

Datenvolumen anschauen

Diese Shell Funktion brauche ich auch recht häufig.

Mit docker-vol data_container_1 hat man nun eine shell mit der man sich im Datencontainer umschauen kann.

Nun doch ssh

In der Regel braucht es kein ssh für docker container. Aber manchmal eben doch, z.B. für ein Desktop Programm in docker (mit X forward) oder um via sshfs etwas zu mounten. Der default ssh port ist in der Regel schon belegt und potenziell können natürlich auch mehrere ssh container laufen. Man muss also für jeden container einen eigenen ssh Port benutzen. Um sich nicht die verschiednen Ports merken zu müssen hier eine Shell Funktion.

Mit docker-ssh myssh_container_1 kommt man nun ohne Angabe des Ports in den container, inkl X forward.

Posted by: on
Filed under: docker

2 Comments »

  1. Danke für die Impulse.

    Hast Du eine Idee warum btrfs bei mir nicht geht?

    OSX/docker 1.9 alles aktuell

    danke

    Kommentar by macdet — 31. Januar 2016 @ 10:44

  2. Ich bin wieder abgekommen von btrfs, hatte zuviele Probleme damit. Mein aktuelles setup ist zfs auf dem mac, siehe http://yas.ch/blog/2015/08/18/zfs-as-local-vm-storage-for-vmware-fusion-on-osx/ mit https://openzfsonosx.org. Das Projekt sieht auch noch sehr interessant aus https://github.com/nlf/dlite.

    Kommentar by Yves Serrano — 1. Februar 2016 @ 13:28

RSS feed for comments on this post. TrackBack URL

Leave a comment