User Tools

Site Tools


docker

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
docker [2018/06/16 15:04] – [Keycloak Container für Avril] kalaschnikowdocker [2019/07/06 11:50] (current) – [Docker Commandos] kalaschnikow
Line 1: Line 1:
 +====== 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
 +<code bash>
 +# Laufende Container auflisten
 +docker ps
 +
 +# Alle Container auflisten
 +docker ps -a
 +</code>
 +
 +Images auflisten
 +<code bash>
 +docker image ls 
 +</code>
 +
 +Image in einem TAR-Archiv speichern
 +<code bash>
 +docker image save > /tmp/blubb.tar
 +</code>
 +
 +Nach dem Image ''gitweb'' suchen
 +<code bash>
 +docker search gitweb
 +</code>
 +
 +Image ''fraoustin/gitweb'' herunterladen
 +<code bash>
 +docker pull fraoustin/gitweb
 +</code>
 +
 +Überflüssige Volumes finden
 +<code bash>
 +docker volume ls --filter dangling=true
 +</code>
 +
 +Überflüssige Volumes löschen
 +<code bash>
 +docker volume prune
 +</code>
 +
 +Herausfinden wo die dauerhaft zu speichernde Daten eines Images liegen:
 +<code bash>
 +docker inspect fraousin/gitweb
 +</code>
 +
 +In den Container auf der Commandozeile reinschauen:
 +<code bash>
 +docker exec -it containerid /bin/bash
 +</code>
 +
 +Oder ein anderes Beispiel mit einer anderen Shell und einer anderen Parameter-Schreibweise:
 +
 +<code bash>
 +docker exec -i -t containerid sh
 +</code>
 +
 +Container id kann man mit dem Befehl ''docker ps'' herausfinden.
 +
 +
 +Container laufen lassen
 +<code bash>
 +# 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
 +</code>
 +
 +Docker Container stoppen
 +<code bash>
 +docker stop <container_id>
 +</code>
 +
 +===== 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:
 +<code bash>
 +sudo docker network create avrilnet
 +</code>
 +
 +Container mit dem Alias ''avrilmysql'' im Network ''avrilnet'' laufen lassen:
 +<code bash>
 +sudo docker run ... --network avrilnet --network-alias avrilmysql
 +</code>
 +
 +===== MySQL Container für Keycloak Datenbank =====
 +
 +Container starten
 +<code bash>
 +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
 +</code>
 +
 +
 +MySQL client aufrufen:
 +<code bash>
 +mysql -h 127.0.0.1 -P 3306 --user=root --password
 +</code>
 +
 +Dann dort die Datenbank und User anlegen:
 +<code sql>
 +CREATE DATABASE keycloak;
 +CREATE USER 'keycloak'@'%' IDENTIFIED BY 'keycYaopnlp=8';
 +GRANT ALL PRIVILEGES ON keycloak.* To 'keycloak'@'%';
 +</code>
 +
 +
 +MySQL Dump aus der Datei ''keycloak.sql'' in die Datenbank ''keycloak'' einspielen: 
 +<code bash>
 +mysql -h 127.0.0.1 -P 3306 --user=root --password -vvf keycloak < keycloak.sql
 +</code>
 +
 +===== Keycloak Container für Avril =====
 +
 +Container starten:
 +<code bash>
 +
 +# 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
 +</code>
 +
 +
 +===== MySQL Container für Avril Datenbank =====
 +
 +Container starten
 +<code bash>
 +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
 +</code>
 +
 +
 +MySQL client aufrufen:
 +<code bash>
 +mysql -h 127.0.0.1 -P 3308 --user=root --password
 +</code>
 +
 +Dann dort die Datenbank und User anlegen:
 +<code sql>
 +CREATE DATABASE avril;
 +CREATE USER 'avril'@'%' IDENTIFIED BY 'avrilYaopnlp=8';
 +GRANT ALL PRIVILEGES ON avril.* To 'avril'@'%';
 +</code>
 +
 +
 +MySQL Dump aus der Datei ''avril.sql'' in die Datenbank ''avril'' einspielen: 
 +<code bash>
 +mysql -h 127.0.0.1 -P 3308 --user=root --password -vvf avril < avril.sql
 +</code>
 +
 +
 +
 +
 +===== Avril Container =====
 +
 +<code bash>
 +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
 +</code>
 +
 +===== 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