Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:docker:build

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
admin_grundlagen:docker:build [2026/10/09 20:52] – [Logging hinzufügen] ingo_wichmannadmin_grundlagen:docker:build [2026/10/09 20:58] (aktuell) – ingo_wichmann
Zeile 35: Zeile 35:
   docker container run --rm --dns 192.168.1.5 ingo/debian:local apt update   docker container run --rm --dns 192.168.1.5 ingo/debian:local apt update
 )) ))
-===== Image aus Dockerfile bauen ===== 
-  mkdir nginx 
-  cd nginx 
-++++ podman | 
-bei Podman darf die Datei auch ''Containerfile'' heißen 
-++++ 
-<file txt Dockerfile> 
-FROM ingo/debian:trixie 
-RUN set -eux; \ 
-  mkdir -p /var/www/html; \ 
-  echo 'A warm welcome from your Dockerfile' > /var/www/html/index.html 
-ARG REFRESHED_AT=1970-01-01 
-ENV DEBIAN_FRONTEND=noninteractive 
-RUN set -eux; \ 
-  apt-get -qq update; \ 
-  apt-get install -y --no-install-recommends nginx 
-EXPOSE 80 
-ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"] 
-  
-LABEL version="0.0.1" 
-LABEL maintainer="me@example.com" 
-LABEL org.opencontainers.image.authors="me@example.com" 
-LABEL org.opencontainers.image.created=$REFRESHED_AT 
-</file> (( https://docs.docker.com/reference/dockerfile/ )) 
-++++ ENTRYPOINT / CMD / run-Command | 
-^ ''ENTRYPOINT'' ^ ''CMD'' ^ run-Command ^ ausgeführt wird ^ 
-|<code>["script.sh"]</code>|                          |                        | <code>script.sh</code> | 
-|<code>["script.sh"]</code>|                          | <code>/bin/dash</code> | <code>script.sh /bin/dash</code> | 
-|<code>["script.sh"]</code>| <code>["httpd"]</code>   |                        | <code>script.sh httpd</code> | 
-|<code>["script.sh"]</code>| <code>["httpd"]</code>   | <code>/bin/dash</code> | <code>script.sh /bin/dash</code> | 
-|                          | <code>["/bin/sh"]</code> |                        | <code>/bin/sh</code>   | 
-|                          | <code>["/bin/sh"]</code> | <code>/bin/dash</code> | <code>/bin/dash</code> | 
-|                          |                          |                        | <code>/bin/bash</code> (( 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 :-( 
-<file txt Dockerfile> 
-… 
-RUN set -eux; \ 
-  ln -sf /dev/stdout /var/log/nginx/access.log; \ 
-  ln -sf /dev/stderr /var/log/nginx/error.log; 
-… 
-</file> 
- 
-  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 ===== 
-<file txt Dockerfile> 
-… 
-#RUN set -eux; \ 
-#  apt-get install -y --no-install-recommends curl; 
-HEALTHCHECK --interval=10s --timeout=3s \ 
-  CMD curl -sf http://localhost/ || exit 1 
-… 
-</file> 
- 
-Container neu bauen und starten und Health Status prüfen: 
- 
-  watch "docker inspect my_nginx | jq '.[].State.Health'" 
-und 
-  watch docker container ps 
- 
-===== TODO ===== 
- 
-++++ Nginx as Systemd | 
- 
- 
-<code bash> 
-mkdir ~/ubi9-nginx && cd ~/ubi9-nginx 
-cat >Dockerfile <<EOR 
-FROM registry.access.redhat.com/ubi9/ubi-init 
-RUN cat <<'EOF' >/etc/yum.repos.d/nginx.repo 
-[nginx-stable] 
-name=nginx stable repo 
-baseurl=http://nginx.org/packages/rhel/9/\$basearch/ 
-gpgcheck=1 
-enabled=1 
-gpgkey=https://nginx.org/keys/nginx_signing.key 
-module_hotfixes=true 
-EOF 
- 
-RUN dnf -y install nginx \ 
- && dnf clean all \ 
- && systemctl enable nginx 
-STOPSIGNAL SIGRTMIN+3 
-CMD ["/sbin/init"] 
-EOR 
- 
-docker build -t ubi9-nginx-systemd:0.0.1 . 
-docker run --name ubi9-nginx --privileged -d -p 8090:80 ubi9-nginx-systemd:0.0.1 
-docker exec -it ubi9-nginx nginx -v 
-docker exec -it ubi9-nginx systemctl status 
-docker exec -it ubi9-nginx journalctl -u nginx 
-# ups.. 
-docker logs ubi9-nginx 
-</code> 
- 
-<code bash> 
-# build with compose 
-cat >compose.yml <<EOR 
-services: 
-  nginx: 
-    build: . 
-    privileged: true 
-    ports: 
-      - "8090:80"     
-    tmpfs: 
-      - /run 
-      - /run/lock 
-      - /tmp 
-    stop_signal: SIGRTMIN+3 
-EOR 
-docker compose build 
-docker compose up -d 
-docker compose exec nginx ps -ef 
-docker compose down 
-</code> 
-++++ 
-++++ this doesn't solve the console logging problem | 
- 
-<code bash> 
- 
-cat >Dockerfile <<EOR 
-FROM registry.access.redhat.com/ubi9/ubi-init 
-RUN cat <<'EOF' >/etc/yum.repos.d/nginx.repo 
-[nginx-stable] 
-name=nginx stable repo 
-baseurl=http://nginx.org/packages/rhel/9/\$basearch/ 
-gpgcheck=1 
-enabled=1 
-gpgkey=https://nginx.org/keys/nginx_signing.key 
-module_hotfixes=true 
-EOF 
- 
-RUN dnf -y install nginx \ 
- && dnf clean all 
- 
-# nginx logs to files (important for tail) 
-RUN mkdir -p /var/log/nginx 
- 
-# systemd override for nginx 
-RUN mkdir -p /etc/systemd/system/nginx.service.d && \ 
-    cat <<'EOF' >/etc/systemd/system/nginx.service.d/override.conf 
-[Service] 
-StandardOutput=journal 
-StandardError=journal 
-EOF 
- 
-# log forwarder service 
-RUN cat <<'EOF' >/etc/systemd/system/nginx-log-forwarder.service 
-[Unit] 
-Description=Nginx log forwarder 
-After=nginx.service 
-Requires=nginx.service 
-[Service] 
-Type=simple 
-ExecStart=/bin/sh -c '/usr/bin/tail -F /var/log/nginx/access.log /var/log/nginx/error.log' 
-Restart=always 
-[Install] 
-WantedBy=multi-user.target 
-EOF 
- 
-RUN systemctl enable nginx \ 
- && systemctl enable nginx-log-forwarder 
-STOPSIGNAL SIGRTMIN+3 
-CMD ["/sbin/init"] 
-EOR 
- 
-# docker  
-docker compose build 
-docker compose up -d 
-curl 127.0.0.1:8090 
-docker compose exec nginx systemctl status nginx-log-forwarder 
-docker compose exec nginx journalctl -u nginx-log-forwarder 
-# see access logs 
-docker logs nginx_nginx_1 
- 
-# podman 
-podman compose build 
-podman compose up -d 
-curl 127.0.0.1:8090 
-podman compose exec nginx systemctl status nginx-log-forwarder 
-podman compose exec nginx journalctl -u nginx-log-forwarder 
-# see access logs 
-podman logs nginx_nginx_1 
-# no logging output! 
-</code> 
- 
-++++ 
  
admin_grundlagen/docker/build.txt · Zuletzt geändert: 2026/10/09 20:58 von ingo_wichmann