===== Image aus Dockerfile bauen ===== mkdir nginx cd nginx ++++ podman | bei Podman darf die Datei auch ''Containerfile'' heißen ++++ FROM ingo/debian:trixie RUN mkdir -p /var/www/html ARG REFRESHED_AT=1970-01-01 COPY < (( https://docs.docker.com/reference/dockerfile/ )) ++++ ENTRYPOINT / CMD / run-Command | ^ ''ENTRYPOINT'' ^ ''CMD'' ^ run-Command ^ ausgeführt wird ^ |["script.sh"]| | | script.sh | |["script.sh"]| | /bin/dash | script.sh /bin/dash | |["script.sh"]| ["httpd"] | | script.sh httpd | |["script.sh"]| ["httpd"] | /bin/dash | script.sh /bin/dash | | | ["/bin/sh"] | | /bin/sh | | | ["/bin/sh"] | /bin/dash | /bin/dash | | | | | /bin/bash (( https://docs.docker.com/reference/dockerfile/#understand-how-cmd-and-entrypoint-interact sagt ''error, not allowed''. Docker Version 20.10.24+dfsg1 hat ''bash'' ausgeführt.)) | ++++ Image mit den Erweiterungen aus dem ''Dockerfile'' bauen: (( falls ''apt update'' Spiegelserver im Linuxhotel-Netz nicht findet: docker build --dns 192.168.1.5 -t='ingo/nginx:0.0.1' . )) docker build -t='ingo/nginx:0.0.1' . Image anzeigen: docker image ls ingo/nginx:0.0.1 -> id rauskopieren (z.B. ''5879d7773761'') Image taggen: docker image tag 5879d7773761 ingo/nginx:latest Container starten: docker container run --rm -d -p 80:80 --name my_nginx ingo/nginx Zugriff auf nginx testen: curl -s http://localhost:80 oder im Browser http://localhost öffnen ===== Image aktualisieren ===== ==== Wiederverwendung der Layer ==== docker build -t='ingo/nginx:0.0.1' . -> ''CACHED'' oder ''Using cache …'' -> Layer wird nicht aktualisiert docker image inspect ingo/nginx:0.0.1 | jq -r '.[0].Config.Labels."org.opencontainers.image.created"' -> gibt aus: ''1970-01-01'' ==== Cache abschalten ==== docker build --no-cache -t='ingo/nginx:0.0.1' . ==== Bauen mit einem Release Zeitstempel ==== REFRESHED_AT=$(date '+%Y-%m-%d') docker build --build-arg "REFRESHED_AT=$REFRESHED_AT" -t='ingo/nginx:0.0.1' . -> alle Layer ab ''ARG REFRESHED_AT=1970-01-01'' werden aktualisiert Prüfen, ob der Zeitstempel aktuell ist: docker image inspect ingo/nginx:0.0.1 | jq -r '.[0].Config.Labels."org.opencontainers.image.created"' -> gibt aktuelles Datum aus ===== Logging hinzufügen ===== docker logs my_nginx -> keine Logs :-( … RUN set -eux; \ ln -sf /dev/stdout /var/log/nginx/access.log; \ ln -sf /dev/stderr /var/log/nginx/error.log; … docker build --no-cache -t='ingo/nginx:0.0.2' . Jetzt noch mal Container starten und curl -s http://localhost:80 docker logs my_nginx ansehen. ===== Health Status hinzufügen ===== … #RUN apt-get install -y --no-install-recommends curl; HEALTHCHECK --interval=10s --timeout=3s \ CMD curl -sf http://localhost/ || exit 1 … Container neu bauen und starten und Health Status prüfen: watch "docker inspect my_nginx | jq '.[].State.Health'" und watch docker container ps