Docker.io in der Praxis - Installation (Permalink)

Nachdem Docker immer mehr gehyped wird (LinuxMagazin 09/14, c't 17/2014), soll das ganze hier mal für einen Root-Server inklusive folgender Dienste getestet:

  • Wordpress (inklusive MySQL Datenbank)
  • OpenVPN Server
  • getrennter SSH Server für IRC mit irssi in screen oder tmux

Zusätzlich soll als Option das schnelle und einfache Bereitstellen von weiteren Diensten auf Basis von Technologien wie Node.js und NoSQL Datenbanken möglich sein.

Installation von Docker auf dem Root-Servers

Zunächst muss Docker installiert werden. Das soll nun hier besprochen werden.

Basisinstallation

Der Hoster bietet hier Debian-76-wheezy-64-minimal an.

Nach der Installation muss die Liste der Paket-Quellen angepasst werden (Debian Testing wird benötigt). Dabei hilft der Debian Sources List Generator:

deb http://ftp.debian.org/debian testing main contrib 
deb-src http://ftp.debian.org/debian testing main contrib

deb http://ftp.debian.org/debian/ jessie-updates main contrib 
deb-src http://ftp.debian.org/debian/ jessie-updates main contrib

deb http://security.debian.org/ jessie/updates main contrib 
deb-src http://security.debian.org/ jessie/updates main contrib

Anschließend mit apt-get update und apt-get dist-upgrade auf die Debian-Version jessie (bzw. testing) updaten.

Nun für den richtigen Kernel sorgen:

echo "deb http://ftp.us.debian.org/debian wheezy-backports main" >

/etc/apt/sources.list.d/wheezy-backports.list apt-get update apt-get -t wheezy-backports install linux-image-amd64

Docker installieren

Für Docker gibt es ein Ubuntu Repository, welches auch für Debian verwendet werden kann:

apt-key adv --keyserver keyserver.ubuntu.com   
   --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
echo "deb http://get.docker.io/ubuntu docker main" >   
   /etc/apt/sources.list.d/docker.list
apt-get update
apt-get install lxc-docker

Die beiden letzen Schritte nach dieser Anleitung: http://doduck.com/docker-install-on-debian-7/

IPv6 für die Container

IPv6 ermöglicht es, für jeden Container eine eigene IP zu reservieren.

Leider wird IPv6 von Docker zum aktuellen Stand (23. August 2014, Docker Version  1.2.0) noch nicht unterstützt, kann aber über lxc direkt an den Container durchgereicht werden. Wenn IPv6 nicht verwendet werden soll, so kann dieser Abschnitt übersprungen werden.

Für IPv6 muss in der Datei /etc/sysctl.conf folgende Zeile eingefügt oder wieder eingkommentiert werden:

net.ipv6.conf.all.forwarding=1

Und der Docker-Daemon muss auf den lxc Treiber umgestellt werden. Dazu unter Debian in der Datei /etc/default/docker folgendes eintragen:

DOCKER_OPTS="--exec-driver=lxc"

Zusätzlich muss das lxc Paket installiert werden:

apt-get install lxc

Nun muss der von Docker angelegten Bridge noch eine  IPv6 IP hinzufügen:

ip -6 addr add aaaa:bbbb:cccc:dddd::1:1/112 dev docker0

Dabei muss natürlich aaaa:bbbb:cccc:dddd durch einen entsprechenden Teil des eigenen IPv6 Subnetzes ersetzt werden.

Um das Ganze zu Vereinfachen, bietet es sich an, Container dann mit folgendem Script zu starten:

NW_IP=$1
shift
NW_GW=aaaa:bbbb:cccc:dddd::1:1
#shift
REST=$@

docker run \
   --lxc-conf="lxc.network.flags=up" \
   --lxc-conf="lxc.network.ipv6=$NW_IP" \
   --lxc-conf="lxc.network.ipv6.gateway=$NW_GW" \
   $REST

Beim Aufrufen muss die IPv6 Adresse inklusive Subnetzmaske angegeben werden, also aaaa:bbbb:cccc:dddd::1:2/112.

Résumé

Nun ist es möglich mit Docker Container zu verwenden und sogar IPv6 direkt in die Container zu leiten.