Ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom zweiten Tag in Block 12 gelernt und behalten habe:
Zusammenfassung von gestern:
Wir haben ein Dockerfile und eine Jar-Datei (mvn package) erstellt. Beides liegt in einem Verzeichnis. Dort starten wir die Kommandos:
docker build --tag imagename:version
docker run -d -p8081:8080 --name KWS imagenme:version

Hier der Inhalt vom Dockerfile:
# Build-Time FROM openjdk:11 WORKDIR / ADD ueb02-kehrwertservice-0.0.1-SNAPSHOT.jar app.jar # Run-Time EXPOSE 8080 CMD java -jar app.jar[
Alte Docker-Container löschen
Mit "docker run" werden Container gestartet. Allerdings sollte man dies nur einmal tun. Danach kann man einen bestehenden Container mit "docker start" starten. Wenn man (so wie ich auf meinem Raspberry Pi) aber seine Container immer mit einem "run" startet, entstehen viele unbenötigte Zombies. Diese kann man mit "docker ps -a" auflisten. Und man kann sie alle auf einmal mit folgendem Befehl löschen:
sudo docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs sudo docker rm
Bash oder andere Befehle innerhalb eines Containers aufrufen
Ein Container ist eine in sich abgeschlossene Computerinsel. Um in diese hinein zu gelangen gibt es den Befehl:
docker exec -it <containername> bash
Oder man führt Linux-Befehle direkt aus:
[linux@essen2-0005 kehrwertservice]$ docker exec -it kehrwerservice top

Logdateien auslesen:
docker logs -f kehrwerservice

Docker port finden:
docker port kehwerservice

Installation eines WebServices
Welcher Webserver ist besser? NGINX oder Apache?

Apache ist alt und schwergewichtig geworden. NGINX hat eine gute Performance.
Wir entscheiden uns für NGINX: https://hub.docker.com/_/nginx

Mit dem -v Parameter (für Volume) können wir variable Verzeichnisse dem Container zur Verfügung stellen:


Wir laden nginx runter mit "docker pull nginx" und starten dann den Container:

Container erzeugen:
docker run -d --name web01 -p80:80 nginx
Inhalte ändern:
docker exec -it web01 bash // Shell im Container öffnen ls -l /usr/share/nginx/html/ vi /usr/share/nginx/html/index.html
Wir wollen nun einige Inhalte des Containers externalisieren. Dazu erstellen wir erst mal im Linux eine eigene Verzeichnisstruktur in unserem Ordner nginx-web:

Darauf soll aus dem Container folgendes gemappt werden:
conf -> /usr/local/nginx/
web -> /usr/share/nginx/html/
logs -> /var/log/nginx/
Links im Bild die Linux-Struktur (extern), rechts die Container-Struktur (intern):

Der Befehl bei uns zum Erstellen des nginx-Containers lautet somit:
docker run --name my-nginx \ -v /home/linux/docker-space/nginx-web/web:/usr/share/nginx/html:ro \ -v /home/linux/docker-space/nginx-web/conf:/usr/local/nginx:ro \ -v /home/linux/docker-space/nginx-web/logs:/var/log/nginx:rw \ -p 80:80 \ -d nginx


————————————————-
Disclaimer
Alles was ich mitschrieb und verstanden habe ist ohne Gewähr. Die Bilder stammen teilweise aus dem Internet und wir haben keine Urheberansprüche darauf.
Besten Dank an unseren sehr empfehlenswerten
Trainer: Hans-Joachim Blanke blanke@4point.de

In den nächsten Tagen geht es weiter, so: stay tuned!
Achim Mertens