====== 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