admin_grundlagen:docker:build
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
| admin_grundlagen:docker:build [2026/09/20 06:24] – [Image aktualisieren] ingo_wichmann | admin_grundlagen:docker:build [2026/10/09 20:58] (aktuell) – ingo_wichmann | ||
|---|---|---|---|
| Zeile 24: | Zeile 24: | ||
| ==== testen ==== | ==== testen ==== | ||
| - | docker container run ingo/debian apt update | + | docker container run --rm ingo/debian apt update |
| -> Ausgabe von '' | -> Ausgabe von '' | ||
| (( Wenn nicht: | (( Wenn nicht: | ||
| - | docker container run ingo/debian cat / | + | docker container run --rm ingo/debian cat / |
| -> Nameserver kommt von Docker, nicht aus dem Image | -> Nameserver kommt von Docker, nicht aus dem Image | ||
| Ändern mit: | Ändern mit: | ||
| - | docker container run --dns 192.168.1.5 ingo/ | + | docker container run --rm --dns 192.168.1.5 ingo/ |
| - | docker container run --dns 192.168.1.5 ingo/ | + | docker container run --rm --dns 192.168.1.5 ingo/ |
| )) | )) | ||
| - | ===== Image aus Dockerfile bauen ===== | ||
| - | mkdir nginx | ||
| - | cd nginx | ||
| - | ++++ podman | | ||
| - | bei Podman darf die Datei auch '' | ||
| - | ++++ | ||
| - | <file txt Dockerfile> | ||
| - | FROM ingo/ | ||
| - | |||
| - | 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 | ||
| - | RUN echo 'A warm welcome from your Dockerfile' | ||
| - | EXPOSE 80 | ||
| - | ENTRYPOINT ["/ | ||
| - | |||
| - | LABEL version=" | ||
| - | LABEL maintainer=" | ||
| - | LABEL org.opencontainers.image.authors=" | ||
| - | LABEL org.opencontainers.image.created=$REFRESHED_AT | ||
| - | </ | ||
| - | ++++ ENTRYPOINT / CMD / run-Command | | ||
| - | ^ '' | ||
| - | |< | ||
| - | |< | ||
| - | |< | ||
| - | |< | ||
| - | | | < | ||
| - | | | < | ||
| - | | | | | < | ||
| - | ++++ | ||
| - | Image mit den Erweiterungen aus dem '' | ||
| - | docker build --dns 192.168.1.5 -t=' | ||
| - | )) | ||
| - | docker build -t=' | ||
| - | |||
| - | Image anzeigen: | ||
| - | docker image ls ingo/ | ||
| - | -> id rauskopieren (z.B. '' | ||
| - | |||
| - | Image taggen: | ||
| - | docker image tag 5879d7773761 ingo/ | ||
| - | Container starten: | ||
| - | docker container run -d -p 80:80 --name my_nginx ingo/nginx | ||
| - | Zugriff auf nginx testen: | ||
| - | curl -s http:// | ||
| - | -> im Browser http:// | ||
| - | |||
| - | ===== Image aktualisieren ===== | ||
| - | ==== Wiederverwendung der Layer ==== | ||
| - | docker build -t=' | ||
| - | -> '' | ||
| - | |||
| - | docker image inspect ingo/ | ||
| - | -> gibt aus: '' | ||
| - | |||
| - | ==== Cache abschalten ==== | ||
| - | docker build --no-cache -t=' | ||
| - | |||
| - | ==== Bauen mit einem Release Zeitstempel ==== | ||
| - | REFRESHED_AT=$(date ' | ||
| - | docker build --build-arg " | ||
| - | -> alle Layer ab '' | ||
| - | |||
| - | Prüfen, ob der Zeitstempel aktuell ist: | ||
| - | docker image inspect ingo/ | ||
| - | -> gibt aktuelles Datum aus | ||
| - | |||
| - | |||
| - | ===== Logging hinzufügen ===== | ||
| - | |||
| - | <file txt Dockerfile> | ||
| - | … | ||
| - | RUN ln -sf /dev/stdout / | ||
| - | && ln -sf /dev/stderr / | ||
| - | … | ||
| - | </ | ||
| - | |||
| - | docker build --no-cache --pull -t=' | ||
| - | |||
| - | ++++ podman | | ||
| - | podman build --no-cache -t=' | ||
| - | -> allerdings werden dann alle 12 STEPs neu gebaut. | ||
| - | |||
| - | TODO: liegt das an dem fehlenden --pull? | ||
| - | AI Slop Vermutung: | ||
| - | Docker built your image without errors because it keeps un-namespaced local images as-is. In contrast, Podman automatically prefixes locally built or untagged registry images with localhost/ to prevent collisions with official registries. | ||
| - | When you use the --pull flag, Podman is forced to try downloading a fresh version of that base image from an external source. Because it sees localhost/ | ||
| - | |||
| - | Unter Debian mit Docker version 26.1.5+dfsg1, | ||
| - | ERROR: failed to solve: ingo/ | ||
| - | ++++ | ||
| - | |||
| - | Jetzt noch mal Container starten und | ||
| - | docker logs | ||
| - | ansehen. | ||
| - | |||
| - | ===== TODO ===== | ||
| - | |||
| - | ++++ Nginx as Systemd | | ||
| - | |||
| - | |||
| - | <code bash> | ||
| - | mkdir ~/ | ||
| - | cat > | ||
| - | FROM registry.access.redhat.com/ | ||
| - | RUN cat <<' | ||
| - | [nginx-stable] | ||
| - | name=nginx stable repo | ||
| - | baseurl=http:// | ||
| - | gpgcheck=1 | ||
| - | enabled=1 | ||
| - | gpgkey=https:// | ||
| - | module_hotfixes=true | ||
| - | EOF | ||
| - | |||
| - | RUN dnf -y install nginx \ | ||
| - | && | ||
| - | && | ||
| - | STOPSIGNAL SIGRTMIN+3 | ||
| - | CMD ["/ | ||
| - | EOR | ||
| - | |||
| - | docker build -t ubi9-nginx-systemd: | ||
| - | docker run --name ubi9-nginx --privileged -d -p 8090:80 ubi9-nginx-systemd: | ||
| - | 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 bash> | ||
| - | # build with compose | ||
| - | cat > | ||
| - | services: | ||
| - | nginx: | ||
| - | build: . | ||
| - | privileged: true | ||
| - | ports: | ||
| - | - " | ||
| - | tmpfs: | ||
| - | - /run | ||
| - | - /run/lock | ||
| - | - /tmp | ||
| - | stop_signal: | ||
| - | EOR | ||
| - | docker compose build | ||
| - | docker compose up -d | ||
| - | docker compose exec nginx ps -ef | ||
| - | docker compose down | ||
| - | </ | ||
| - | ++++ | ||
| - | ++++ this doesn' | ||
| - | |||
| - | <code bash> | ||
| - | |||
| - | cat > | ||
| - | FROM registry.access.redhat.com/ | ||
| - | RUN cat <<' | ||
| - | [nginx-stable] | ||
| - | name=nginx stable repo | ||
| - | baseurl=http:// | ||
| - | gpgcheck=1 | ||
| - | enabled=1 | ||
| - | gpgkey=https:// | ||
| - | module_hotfixes=true | ||
| - | EOF | ||
| - | |||
| - | RUN dnf -y install nginx \ | ||
| - | && | ||
| - | |||
| - | # nginx logs to files (important for tail) | ||
| - | RUN mkdir -p / | ||
| - | |||
| - | # systemd override for nginx | ||
| - | RUN mkdir -p / | ||
| - | cat <<' | ||
| - | [Service] | ||
| - | StandardOutput=journal | ||
| - | StandardError=journal | ||
| - | EOF | ||
| - | |||
| - | # log forwarder service | ||
| - | RUN cat <<' | ||
| - | [Unit] | ||
| - | Description=Nginx log forwarder | ||
| - | After=nginx.service | ||
| - | Requires=nginx.service | ||
| - | [Service] | ||
| - | Type=simple | ||
| - | ExecStart=/ | ||
| - | Restart=always | ||
| - | [Install] | ||
| - | WantedBy=multi-user.target | ||
| - | EOF | ||
| - | |||
| - | RUN systemctl enable nginx \ | ||
| - | && | ||
| - | STOPSIGNAL SIGRTMIN+3 | ||
| - | CMD ["/ | ||
| - | EOR | ||
| - | |||
| - | # docker | ||
| - | docker compose build | ||
| - | docker compose up -d | ||
| - | curl 127.0.0.1: | ||
| - | 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: | ||
| - | 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! | ||
| - | </ | ||
| - | |||
| - | ++++ | ||
admin_grundlagen/docker/build.1789885489.txt.gz · Zuletzt geändert: 2026/09/20 06:24 von ingo_wichmann
