Docker unter Ubuntu 15.04

Datenbank gefällig? Einfach schnell  docker run --name mysql -e MYSQL_ROOT_PASSWORD=rootpasswort -d mysql:latest eingeben und schon läuft eine aktuelle MySQL-Datenbank im Container. Soweit das Versprechen. Doch erstmal will Docker installiert sein und dabei gibt es unter Ubuntu 15.04 die eine oder andere kleine Klippe zu umschiffen…

Docker Service installieren und starten

Die Installation von Docker selbst ist trivial.

Leider gibt der Versuch, Docker jetzt zu starten oder einfach nur docker info  aufzurufen oft die Fehlermeldung:

Anders als zu erwarten wäre hat das gar nichts mit TLS zu tun: Der Docker Service läuft schlicht nicht und hat daher die Pseudodatei (es handelt sich um ein Socket) docker.sock noch nicht angelegt. Das hat scheinbar damit zu tun, dass Ubuntu seit Version 15.04 nicht mehr Upstart sondern systemd verwendet um seine Services zu verwalten.

Wenn es die Datei erstmal gibt und der Service nicht läuft gibt es im übrigen eine sehr viel aussagekräftigere Fehlermeldung:

Mit  sudo systemctl start docker  startet man den Docker Service und mit  sudo systemctl enable docker  sorgt man dafür, dass Docker beim nächsten Systemstart mit gestartet wird. Das sollte automatisch so sein – bei mir war das nicht so. Nach dem Starten des Service sieht die Sache dann schon ganz anders aus.

Mittels  sudo docker info  bekommt man jetzt endlich etwas zu sehen:

Und als normaler User?

Eigentlich ist man an dieser Stelle jetzt soweit und kann seine Docker Container loslaufen lassen. Aber als Entwickler möchte ich nicht immer alles, was ich so in die Finger bekomme, via sudo als root laufen lassen, sondern mit meinen Rechten. Leider geht das erstmal nicht:

Warum da jedesmal dieser TLS-Kram steht, ist mir im Übrigen schleierhaft… Sei’s drum. Das Rätsels Lösung ist, dass ein normaler Nutzer nicht das Recht hat auf den Socket zuzugreifen. Gerade für einen Server soll das ja auch so sein. Aber, wie gesagt, als Entwickler wäre es mir lieber, einen Container mit weniger Rechten laufen lassen zu können.

Mittels

sudo apt install apparmor cgroup-lite

gibt man dem Host weitere Werkzeuge zur Rechteverwaltung. Der Socket gehört root:docker. Daher fügt man mittels  sudo usermod -a -G docker cgd den Nutzer, der Docker nutzen soll (hier cgd), der Gruppe docker hinzu. Schnell testen:

Oh. Kleine Falle: Die neue Gruppe ist erst sichtbar, nachdem man sich aus- und eingeloggt hat. Alternativ hilft newgrp docker .

Das sieht schon besser aus. Anders herum geht es im Übrigen mit dem netten Tool members, das man allerdings erst via  sudo apt install members installieren muss:

Leider klappt es immer noch nicht Docker aufzurufen. Die cgroups werden teilweise beim Booten des Systems angelegt. Man kann das wohl auch durch geschicktes Neustarten der Services erreichen, aber manchmal ist weniger mehr. Also kurz neu gestartet… E voilá:

Noch eine Anmerkung zu der Datenbank vom Anfang…

Die Datenbank so zu starten wie in der Einführung beschrieben funktioniert im Prinzip. Allerdings ist bei Docker normalerweise alles weg, wenn der Container beendet wird. Für eine Wegwerf-Datenbank zum Testen mag das genau das Richtige sein; ansonsten muss man, wie z.B. auf https://registry.hub.docker.com/u/library/mysql/ beschrieben, seine Daten außerhalb des Containers persistieren. Ich schreibe deswegen „normalerweise“ weil das mysql Image ein von Docker verwaltetes Volume anlegen lässt um Daten über die Laufzeit des Containers hinaus zu erhalten. Das ist bei Leibe nicht immer der Fall und man sollte sich nicht blind darauf verlassen, dass es alle Images so machen!

Viel Spaß beim Rumdockern!

 

Das Titelbild stammt von https://www.flickr.com/photos/xmodulo/14098888813 und steht unter der CC BY 2.0 Lizenz.

You may also like...

6 Responses

  1. Patrick sagt:

    Hi Christoph, danke für den interessanten Artikel. Für was genau installierst du apparmor und das cgroup-lite Paket? Die usermod und groups Befehle stehen ja auch so zur Verfügung. Grüße!

  2. Christoph Grimmer-Dietrich sagt:

    Hallo Patrick,

    das ist ein bisschen dem Rumprobieren geschuldet. Nur durch das usermod hat es nicht funktioniert, mich als normaler Nutzer einen Container laufen zu lassen. Auf stackoverflow (http://stackoverflow.com/questions/27528337/am-i-trying-to-connect-to-a-tls-enabled-daemon-without-tls) habe ich dann die Sache mit apparmor und cgroup-lite gefunden. Da es danach geklappt hat, steht’s so im Blog.

    • Patrick sagt:

      Okay. Danke! Ich habe diesen Schritt unter Ubuntu 15.04 nämlich nicht gebraucht, aber ich nutze auch das Docker-Paket aus den Docker-Repositories deb https://get.docker.com/ubuntu docker main, dort steht bereits Version 1.6.2 zur Verfügung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Time limit is exhausted. Please reload the CAPTCHA.