Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


admin_grundlagen:docker:apache_httpd_mit_docker

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
admin_grundlagen:docker:apache_httpd_mit_docker [2026/02/22 16:23] – [manuell] ingo_wichmannadmin_grundlagen:docker:apache_httpd_mit_docker [2026/10/13 12:22] (aktuell) – Use explicit registry path natureshadow2
Zeile 1: Zeile 1:
 ====== Apache httpd von Docker ====== ====== Apache httpd von Docker ======
 siehe https://hub.docker.com/_/httpd siehe https://hub.docker.com/_/httpd
- 
-==== Hinweis für Podman ==== 
- 
-Für podmand ''docker'' durch ''podman'' ersetzen und alle Images ggf. mit ''docker.io/'' prefixen. 
  
 ===== persistente Daten für den Container anlegen ===== ===== persistente Daten für den Container anlegen =====
 +++++ Podman |
 +Wenn SELinux aktiv ist, vielleicht ''/var/lib/containers'' anstelle von ''/srv/docker'' verwenden. Da sind die passenden Berechtigungen bereits gesetzt. 
 +++++
   mkdir -p /srv/docker/httpd/htdocs   mkdir -p /srv/docker/httpd/htdocs
   cd /srv/docker/httpd   cd /srv/docker/httpd
Zeile 20: Zeile 19:
 </code> </code>
 ===== erster Start ===== ===== erster Start =====
-  docker run -d --name hello-httpd -p 8888:80 -v '/srv/docker/httpd/htdocs:/usr/local/apache2/htdocs/' httpd:2.4+++++ podman | 
 +Wenn SELinux aktiv ist '':Z'' hinzufügen. Das veranlasst Podman, das Volume mit einem privaten SELinux-Kontext zu relabeln, wodurch der Container Zugriff darauf erhält. 
 +  podman run -d --name hello-httpd -p 8888:80 -v '/srv/docker/httpd/htdocs:/usr/local/apache2/htdocs/:Z' httpd:2.4 
 +++++ 
 +  docker container run -d --name hello-httpd -p 8888:80 -v '/srv/docker/httpd/htdocs:/usr/local/apache2/htdocs/' docker.io/library/httpd:2.4
 -> http://localhost:8888 -> http://localhost:8888
   curl http://localhost:8888   curl http://localhost:8888
-Betreten der Instanz: +WorkingDir herausfinden: (( oder mit ''jq'': 
-  docker exec -it hello-httpd /bin/bash+  docker container inspect hello-httpd | jq -r '.[].Config.WorkingDir' 
 +)) 
 +  docker container inspect -f '{{.Config.WorkingDir}}' hello-httpd 
 + 
 +Mounts herausfinden: 
 +  docker container inspect -f '{{ json .Mounts }}' hello-httpd | jq 
 +   
 +Betreten des Containers: 
 +  docker container exec -it hello-httpd /bin/bash
   ls conf/httpd.conf   ls conf/httpd.conf
   exit   exit
-Instanz löschen: +Container löschen: 
-  docker stop hello-httpd +  docker container rm -f hello-httpd
-  docker rm hello-httpd+
  
 ===== Start mit eigener Konfigurationsdatei ===== ===== Start mit eigener Konfigurationsdatei =====
Zeile 35: Zeile 45:
 Extrahieren der Konfigurationsdatei: Extrahieren der Konfigurationsdatei:
   cd /srv/docker/httpd   cd /srv/docker/httpd
-  docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > httpd.conf+  docker container run --rm docker.io/library/httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > httpd.conf
 Konfigurationsdatei bearbeiten: Konfigurationsdatei bearbeiten:
   sed -i.bak 's/^Listen 80/Listen 8001/' httpd.conf   sed -i.bak 's/^Listen 80/Listen 8001/' httpd.conf
   diff httpd.conf{,.bak}   diff httpd.conf{,.bak}
 Starten: Starten:
-  docker run -d --name httpd_8001 -p 8888:8001 -v '/srv/docker/httpd/htdocs:/usr/local/apache2/htdocs/' -v '/srv/docker/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf' httpd:2.4+  docker container run -d --name httpd_8001 -p 8888:8001 -v '/srv/docker/httpd/htdocs:/usr/local/apache2/htdocs/' -v '/srv/docker/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf' docker.io/library/httpd:2.4
 -> http://localhost:8888 -> http://localhost:8888
  
-Löschen: +Container löschen: 
-  docker stop httpd_8001 +  docker container rm -f httpd_8001
-  docker rm httpd_8001+
 ==== mit Dockerfile ==== ==== mit Dockerfile ====
-TODO: 
 <code Dockerfile Dockerfile> <code Dockerfile Dockerfile>
 FROM httpd:2.4 FROM httpd:2.4
-CMD sed -i 's/^Listen 80/Listen 8001/' /usr/local/apache2/conf/httpd.conf+RUN sed -i.bak 's/^Listen 80/Listen 8001/' /usr/local/apache2/conf/httpd.conf 
 +EXPOSE 8001/tcp 
 +</code> 
 +  docker build -t='ingo/apache:0.0.1' . 
 +  docker container run -d -P ingo/apache:0.0.1 
 +  docker container ls 
 +-> ''->8001/tcp'' 
 + 
 +Problem: im Image ''httpd:2.4'' steht ''EXPOSE 80/tcp''. Um das zu ändern, muss man ein neues Image erzeugen und alle relevanten Instruktionen neu setzen. (Oder man ignoriert es, ''EXPOSE'' dient nur der Dokumentation.) 
 + 
 +  docker image inspect 
 +-> altes ''expose'' ist noch enthalten 
 + 
 +++++ Das zu lösen ist komplizierter| 
 + 
 +  docker image history --no-trunc httpd:2.4 
 +-> alle Anweisungen rauskopieren, die im neuen Image enthalten sein sollen 
 + 
 +<code Dockerfile Dockerfile> 
 +FROM docker.io/library/httpd:2.4 AS build 
 +RUN sed -i.bak 's/^Listen 80/Listen 8001/' /usr/local/apache2/conf/httpd.conf 
 + 
 +FROM scratch 
 +COPY --from=build / / 
 +ENV HTTPD_PREFIX=/usr/local/apache2 
 +ENV PATH=/usr/local/apache2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
 +ENV HTTPD_VERSION=2.4.66 
 +ENV HTTPD_SHA256=94d7ff2b42acbb828e870ba29e4cbad48e558a79c623ad3596e4116efcfea25a 
 +ENV HTTPD_PATCHES= 
 +CMD ["httpd-foreground"] 
 +EXPOSE 8001/tcp
 </code> </code>
 +  docker build -t='ingo/apache:0.0.1' .
 +  docker container run -d -P ingo/apache:0.0.1
 +  docker container ls
 +-> ''->8001/tcp''
 +++++
  
admin_grundlagen/docker/apache_httpd_mit_docker.1771777387.txt.gz · Zuletzt geändert: 2026/02/22 16:23 von ingo_wichmann