====== Docker ======
Container werden auf Basis von Images erstellt.\\
Container -> eigener Prozess.\\
Schichten: Die unteren Schichten sind von oberen nur lesbar. Beschreibbare Datenschicht ist containerspezifisch.\\
Dateisystem-Overlays\\
Container sind über ein eigenes Netzwerk verbunden -> User Defined Networks
Paradigma: ein Dienst pro Container
Mehrere Container verbinden: Docker Compose.
===== c't Ressourcen =====
**c't 15/2017** (ab S. 110 Docker Spezial)\\
S.110: Docker-Container für Heim- und Webserver\\
S.106: Wo Container punkten
**c't 6/2018**\\
S.57: Container-Testumgebung: Play with Docker
**c't 10/2018**\\
S.160 : Fragen und Antworten
===== Docker Commandos =====
**Wichtig:** //Alle folgenden Commandos sollte man am besten mit ''sudo'' ausführen.//
Container auflisten
# Laufende Container auflisten
docker ps
# Alle Container auflisten
docker ps -a
Images auflisten
docker image ls
Image in einem TAR-Archiv speichern
docker image save > /tmp/blubb.tar
Nach dem Image ''gitweb'' suchen
docker search gitweb
Image ''fraoustin/gitweb'' herunterladen
docker pull fraoustin/gitweb
Überflüssige Volumes finden
docker volume ls --filter dangling=true
Überflüssige Volumes löschen
docker volume prune
Herausfinden wo die dauerhaft zu speichernde Daten eines Images liegen:
docker inspect fraousin/gitweb
In den Container auf der Commandozeile reinschauen:
docker exec -it containerid /bin/bash
Oder ein anderes Beispiel mit einer anderen Shell und einer anderen Parameter-Schreibweise:
docker exec -i -t containerid sh
Container id kann man mit dem Befehl ''docker ps'' herausfinden.
Container laufen lassen
# Vorhandenen Container laufen lassen (der Name wird von Docker automatisch vergeben)
docker run fraoustin/gitweb
# Container mit einem definierten Namen erzeugen und laufen lassen
docker run -d --name gitweb fraoustin/gitweb
Docker Container stoppen
docker stop
===== User Defined Networks =====
* Embedded DNS-Server
* Namensauflösung für Container
Jeder Container hat eine eigene IP und einen Prozessraum.
Alter Weg: über ''--link'' Option.
User Defined Network ''avrilnet'' anlegen:
sudo docker network create avrilnet
Container mit dem Alias ''avrilmysql'' im Network ''avrilnet'' laufen lassen:
sudo docker run ... --network avrilnet --network-alias avrilmysql
===== MySQL Container für Keycloak Datenbank =====
Container starten
sudo docker run --network avrilnet -p 3307:3306 \
--name keycloakmysql -v /dockerdata/keycloakmysql:/var/lib/mysql \
-e MYSQL_DATABASE=keycloak -e MYSQL_USER=keycloak -e MYSQL_PASSWORD=keycYaopnlp=8 \
-e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5
MySQL client aufrufen:
mysql -h 127.0.0.1 -P 3306 --user=root --password
Dann dort die Datenbank und User anlegen:
CREATE DATABASE keycloak;
CREATE USER 'keycloak'@'%' IDENTIFIED BY 'keycYaopnlp=8';
GRANT ALL PRIVILEGES ON keycloak.* To 'keycloak'@'%';
MySQL Dump aus der Datei ''keycloak.sql'' in die Datenbank ''keycloak'' einspielen:
mysql -h 127.0.0.1 -P 3306 --user=root --password -vvf keycloak < keycloak.sql
===== Keycloak Container für Avril =====
Container starten:
# Zuerst die Version keycloak:2.5.1.Final :
sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8080 \
-e MYSQL_PORT_3306_TCP_ADDR=avrilmysql \
-e MYSQL_PORT_3306_TCP_PORT=3307 \
-e DB_ADDR=avrilmysql \
-e MYSQL_DATABASE=keycloak \
-e DB_USER=keycloak \
-e MYSQL_PASSWORD=keycYaopnlp=8 \
-d jboss/keycloak-mysql:2.5.1.Final
# dann Container stoppen
sudo docker stop avrilkeycloak
# und loeschen (die DB bleibt aber intakt, da sie von dem MySQL container verwaltet wird)
sudo docker rm avrilkeycloak
# dann die Version keycloak:3.4.3.Final starten
# (bei dem ersten Start wird automatisch ein DB-Upgrade gemacht)
sudo docker run --network avrilnet --name avrilkeycloak -p 8180:8080 \
-e DB_VENDOR=mysql \
-e DB_ADDR=avrilmysql \
-e MYSQL_PORT_3306_TCP_ADDR=avrilmysql \
-e MYSQL_PORT_3306_TCP_PORT=3307 \
-e MYSQL_PASSWORD=keycYaopnlp=8 \
-d jboss/keycloak:3.4.3.Final
===== MySQL Container für Avril Datenbank =====
Container starten
sudo docker run --network avrilnet -p 3308:3306 \
--name avrilmysql -v /dockerdata/avrilmysql:/var/lib/mysql \
-e MYSQL_DATABASE=avril -e MYSQL_USER=avril -e MYSQL_PASSWORD=avrilYaopnlp=8 \
-e MYSQL_ROOT_PASSWORD=mysqlYaopnlp=8 -d mysql:5.5
MySQL client aufrufen:
mysql -h 127.0.0.1 -P 3308 --user=root --password
Dann dort die Datenbank und User anlegen:
CREATE DATABASE avril;
CREATE USER 'avril'@'%' IDENTIFIED BY 'avrilYaopnlp=8';
GRANT ALL PRIVILEGES ON avril.* To 'avril'@'%';
MySQL Dump aus der Datei ''avril.sql'' in die Datenbank ''avril'' einspielen:
mysql -h 127.0.0.1 -P 3308 --user=root --password -vvf avril < avril.sql
===== Avril Container =====
sudo docker run --network avrilnet --name avril \
-p 8080:8080 -p 9990:9990 \
-v /dockerdata/avril/modules/system/add-ons:/opt/jboss/wildfly/modules/system/add-ons \
-v /dockerdata/avril/upload:/opt/jboss/wildfly/upload \
-v /dockerdata/avril/modules/system/layers/base/com/mysql:/opt/jboss/wildfly/modules/system/layers/base/com/mysql \
-it avril
===== Docker and Maven =====
==== Maven-Plugins ====
[[https://github.com/spotify/dockerfile-maven|Spotify Dockerfile Maven Plugin]]\\
[[https://github.com/fabric8io/docker-maven-plugin|Docker-Maven-Plugin]] by Fabric8io ([[https://dmp.fabric8.io/#introduction|Documentation]])\\
==== Articles ====
[[https://www.ivankrizsan.se/2017/02/14/packaging-a-java-application-in-a-docker-image-with-maven/|Packaging a Java Application in a Docker Image with Maven]]\\
[[https://jaxenter.de/docker-mit-maven-steuern-20211|Docker mit Maven steuern]]\\
===== Misc =====
[[https://www.synology.com/de-de/dsm/packages/Docker|Docker auf Synology Diskstation]] -> [[https://www.synology.com/de-de/products/DS918+|DS918+]] - hat Docker Unterstützung