Docker ist aktuell die führende Virtualisierung für Micro-Services.

Windows#

Inzwischen gibt es eine native Docker-Installation für Windows. Einfach das Paket installieren und dann testen:
docker run hello-world

Prozesse#

"docker ps" listet die laufenden Prozesse, "docker ps -a" listet die auf der Maschine befindlichen Images.

Virtualbox#

Unter Windows läuft Docker momentan mit einem Image boot2docker.iso, welches mit "Docker Toolbox" geliefert wird. Die Installation erfolgt üblicherweise in C:\Program Files\Docker Toolbox, das sollte sich im System-Path befinden.

Die Maschine wird gelöscht und angelegt mit:

$ docker-machine rm default
$ docker-machine create --driver virtualbox default

Hinweis: "default" ist der Standardname der Docker-Maschine.

Environment#

Die Docker-Maschine kann dann unter Windows abgefragt werden mit:
docker-machine env

SSH Verbindung#

Mit dem Command docker-machine kann man sich auch verbinden:
docker-machine ssh default

Images#

Standard-Images werden vom Docker-Hub über das Internet heruntergeladen. Da sind einfache Linuxe mit Java, Tomcat, MySQL etc. verfügbar.

Netwerk#

Netzwerk konfigurieren
ifconfig eth0 192.168.3.1 netmask 255.255.0.0 broadcast 192.168.255.255 up

Deployen#

Die eigene Anwendung wird mit dem Docker-Command deployed oder über das Maven-Plugin com.spotify:docker-maven-plugin.

Maven#

Das Plugin arbeitet mit einem Spring-Boot JAR wie folgt:
<plugin>
	<groupId>com.spotify</groupId>
	<artifactId>docker-maven-plugin</artifactId>
	<version>0.4.13</version>
	<configuration>
		<imageName>${project.artifactId}</imageName>
		<dockerHost>https://192.168.99.101:2376</dockerHost>
		<dockerCertPath>${env.USER_HOME}\.docker\machine\machines\default</dockerCertPath>
		<baseImage>java:8-jdk</baseImage>
		<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
		<exposes>
			<expose>80</expose>
		</exposes>
		<resources>
			<resource>
				<targetPath>/</targetPath>
				<directory>${project.build.directory}</directory>
				<include>${project.build.finalName}.jar</include>
			</resource>
		</resources>
	</configuration>
</plugin>

Docker Console#

Innerhalb der Docker-VM oder einer anderen Docker-Installation stellt das Command "docker" die Verbindung zum Docker-System her. Mit "docker ps" kann man die laufenden Container auflisten lassen.

Docker Maschine#

Customizing findet statt durch /etc/docker/docker.json innerhalb der virtuellen Docker-Maschine.

KeyValueBedeutung
bip192.168.1.5/24Netzwerk range
fixed-cidr192.168.1.20IP-Adresse der eigenen Maschine

Docker auf Linux#

Die fertigen Images bringen erhebliche Einschränkungen mit sich. Daher ist es besser, Docker direkt auf einem Linux zu installieren.

Installation#

Besser ist ein Standard-Linux (etwa Ubuntu) zu verwenden und Docker darauf zu installieren:
curl https://get.docker.com | bash

Port Öffnen#

Leider klappt die Konfiguration per sogenannten Drop-In über /etc/systemd/system/docker.service.d nicht. Einzige Lösung scheint das direkte Editieren des Startup-Script in /lib/systemd/system/docker.service zu sein:
nano /lib/systemd/system/docker.service

Der Daemon dockerd hat viele Parameter (Docker Daemon Parameters), unter anderem das Port-Binding mit -H. Neben dem Parameter -H fd:// (wohl für das docker command selbst) kann man -H tcp://0.0.0.0:2375 hinzufügen (ohne SSH) oder tcp://0.0.0.0:2376 (mit SSH). Dann sind folgende Befehle auszuführen:

systemctl daemon-reload
systemctl restart docker.service

Mit

systemctl stop docker.service
systemctl start docker.service

kann der Service gestoppt und gestartet werden.

DNS konfigurieren#

In docker.service kann ein DNS-Server angegeben werden:
ExecStart=/usr/bin/dockerd --dns 192.168.1.1 [...]

Docker Toolbox#

Unter Windows kann man sich mit der Linux-Variante verbinden, etwa:
set DOCKER_HOST=tcp://192.168.1.99:2375

Damit kann man ganz normal das docker command (docker ps etc. Docker Toolbox) nutzen.

Docker Commands#

Das Command docker ist sowohl auf der installierten Docker-Version verfügbar, als auch auf Windows durch die Installation von Docker-Toolbox. Genau genommen braucht nur docker.exe in den Windows-Path kopiert werden.

Container Bash#

Im Docker-Container kann eine Bash geöffnet werden:
docker exec -it <container-name> bash

Hinweis: Manche Container nutzen "sh" statt "bash".