Achim Mertens avatar

Java Training Block 12 – Microservices + Docker - Tag2

achimmertens

Published: 16 Mar 2022 › Updated: 16 Mar 2022Java Training Block 12 – Microservices + Docker - Tag2

Java Training Block 12 – Microservices + Docker - Tag2

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

Leave Java Training Block 12 – Microservices + Docker - Tag2 to:

Written by

Love also your next but one and create more than you destroy.

Read more #docker posts


Best Posts From Achim Mertens

We have not curated any of achimmertens's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From Achim Mertens