Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:docker:docker_service_selbst_bauen

Dies ist eine alte Version des Dokuments!


Image aus Dockerfile bauen

mkdir nginx
cd nginx

podman

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
ARG DEBIAN_FRONTEND=noninteractive
ENV easteregg='This Image does not have Eastereggs'
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

1)

ENTRYPOINT / CMD / run-Command

Image mit den Erweiterungen aus dem Dockerfile bauen: 3)

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 :-(

Dockerfile
…
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

Dockerfile
…
#RUN set -eux; \
#  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
2)
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.
3)
falls apt update Spiegelserver im Linuxhotel-Netz nicht findet:
docker build --dns 192.168.1.5 -t='ingo/nginx:0.0.1' .
admin_grundlagen/docker/docker_service_selbst_bauen.1791581020.txt.gz · Zuletzt geändert: 2026/10/09 21:23 von ingo_wichmann