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
docker [2019/06/15 12:55] – [Docker Commandos] 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