Weiter geht’s mit Docker.
Wenn man sich erst mal an die ‘Docker way of life’ gewöhnt hat, wird man feststellen, dass man immer weniger Dienste direkt auf dem Server installiert. Stattdessen wird man für jeden Dienst einen Docker container verwenden, weil das eben viel einfacher in der Handhabung ist: Es gibt nie Kompatibilitätsprobleme, man muss nie lang über Konfigurationen nachdenken, und last but not least: Migration auf neue oder ganz andere Hardware ist trivial: Es ist einem Docker container schlicht egal, ob er auf Mac, Linux, Windows oder in der Amazon-ec2 cloud läuft. Er verhält sich immer genau gleich. Und es ist ihm auch egal, ob ein anderer Container, mit dem er kooperiert, sich auf demselben Computer oder auf einem anderen Kontinent befindet.
Doch einen Nachteil gibt es: Wenn man eine Menge Docker container laufen hat, muss man die bei einem Neustart des Servers alle korrekt wieder erstellen und/oder hochfahren, was manchmal schwierig sein kann, wenn das letzte Mal eine Weile her ist, und was auch eine Menge Tipparbeit an der Konsole bedeutet.
Hier kommt docker-compose ins Spiel. Damit kann man ein System aus beliebig
vielen Containern mit einem simplen sudo docker-compose up &
hochfahren und mit sudo docker-compose stop
stoppen.
Dazu muss man sich einmal die Mühe machen, eine Steuerdatei (docker-compose.yml
) zu erstellen. Die sieht zum Beispiel so aus:
owncloud:
image: rgwch/owncloud-client:latest
volumes:
- /srv/ebooks:/srv/owncloud
env_file: ../ebenv.txt
calibre:
image: rgwch/calibre-server:latest
volumes:
- /srv/ebooks:/srv/calibre
ports:
- 4040:8080
gitserver:
build: docker-git
volumes:
- /srv/repositories:/opt/git
ports:
- 5050:80
webelexis:
build: docker-webelexis-server
volumes:
- /home/gerry/dockerfiles/cfglocal.json:/home/webelexis/cfglocal.json
- /home/gerry/dockerfiles/wlxks.jks:/home/webelexis/ks.jks
ports:
- 443:2015
environment:
VERSION: 1.0.0
Das ist im Prinzip ja selbsterklärend. Hier werden zwei Container aus images und zwei aus build-instructions (Dockerfile
s in den
angegebenen Verzeichnissen) erstellt und anschliessend konfiguriert und hochgefahren. Anschliessend kann man mit
http://<adresse>:4040
auf den eBook-Server, mit http://<adresse>:5050
auf den GIT-Server und mit
https://<adresse>
auf den Webelexis-Server zugreifen.
Docker-compose ist dabei auch schlau genug, um bereits existierende Container wiederzuverwenden, anstatt sie bei jedem Start
neu zu erstellen. Neu erstellt wird nur, wenn es neuere Versionen gibt, oder wenn sich (im Fall von build:
) Etwas an
den build-instructions geändert hat.
Wenn man sudo docker-compose up
ohne & am Schluss eingibt, dann bleibt der Prozess im Vordergrund und kann mit einmal CTRL-C
sauber und mit zweimal CTRL_C “hart” gestoppt werden. Wenn man ihn mit & in den Hintergrund schickt, kann man ihn mit
sudo docker-compose stop
sauber und mit kill
hart stoppen.
Wenn man alle Container der Komposition auf einmal löschen will, genügt ein simples sudo docker-compose rm
. Man muss sich
also nicht mehr mit jeder Menge angry_einstein
s und condescent_newton
s herumschlagen, um alle loszuwerden.