(16.09.2024 10:32)Dirk schrieb: Mein fehler war das ich per Localhost mich verbinden wollte, es muss aber mysql heißen, weil ... weil ich es so angegeben habe?
Container bekommen automatisch Hostnamen, die zu dem korrespondieren, was du als Namen der Services im "Services"-Abschnitt angibst.
Code:
services:
php: # <--- Hostname
build: .
mysql: # <--- Hostname
image: mysql:8.0
phpmyadmin: # <--- Hostname
image: phpmyadmin
Theoretisch kannst du auch manuell Namen angeben:
Code:
services:
php: # <--- Hostname
build: .
mysql: # <--- Hostname
image: mysql:8.0
phpmyadmin:
image: phpmyadmin
container_name: admin # <--- Hostname und Container-Name wird hier mit "admin" überschrieben
Noch etwas zu der Sache mit den Versionen von Container-Images:
Dadurch, dass du
Code:
services:
php:
build: .
angegeben hast, fängt docker compose beim ausführen von "docker compose build" oder "docker compose up" an, ein Container-Image zu bauen, welches dann auf deinem Server abgelegt und direkt danach gestartet wird.
Im "Dockerfile", welches dafür benutzt wird ("build: ." gibt an, dass es im aktuellen Verzeichnis nach einem Dockerfile suchen soll), hast du folgendes angegeben:
Das bedeutet, dass Docker sich als "Grundschicht" erstmal das Image "php:8-apache" runterlädt (per Default von
https://hub.docker.com/) und darauf aufbauend deine Befehle, die weiter unten angegeben sind, ausführt. Nachdem die Befehle ausgeführt wurden, wird das Endprodukt (also z.B. installiertes wget, aktiviertes apache2 ssl Modul) als Image abgelegt.
Versionen von Images kannst du pinnen, indem du einen Tag oder einen Digest bzw. Hash angibst. Ein Digest pinnt eine Version sehr sehr spezifisch - sobald sich an einem Image ein Bit ändert, wird der Digest am Ende anders sein.
Welche Versionen von einem Image es gibt, kannst du im Fall von php hier sehen:
https://hub.docker.com/_/php/tags
Hier gibt es noch eine bessere Übersicht, aber vorsicht, es ist wirklich viel:
https://github.com/docker-library/docs/b...file-links
Wenn du in die Suche nun "8-apache" rein wirfst, wirst du auf folgendes Image stoßen:
https://hub.docker.com/layers/library/ph...xt=explore
Das ist das "php"-Image mit dem Tag "8-apache". Viele Anbieter laden verschiedene Varianten hoch, die auf bestimmte Bedürfnisse zugeschnitten sind. In dem Fall beinhaltet dieses PHP-Image das neueste stable PHP in Version 8, und dazu einen Apache-Webserver. Natürlich gibt es dementsprechend auch Varianten, die
ein FPM drin haben, oder z.B. eine
spezifische ältere Debian-Version als Basis benutzen.
Diese Tags (also z.B. "8-apache") sind frei vergebbare Namen. Mit jedem Update wird das "8-apache" Tag überschrieben und beinhaltet dahinter ein anderes Image. Du kannst dir das wie einen Alias vorstellen, der Name zeigt einfach auf ein ganz bestimmtes Image.
Welches ganz bestimmte Image das ist, kann mit dem Digest angegeben werden. Wenn du ein Image pinnst, sieht das z.B. so aus:
Code:
FROM php:8-apache@sha256:7d01ff3c5de85dd3a2acc1cefb8b220e3086488e5f9d506c8b1e7565aa01cd77
Das ist jetzt aber natürlich für manuelle Bearbeitung extrem nervig. Daher bieten viele Anbieter an mehrere Tags an, die auf das gleiche Image zeigen, immer spezifischer von der Versionierung her.
Du kannst also auch
Code:
FROM php:8.3.11-apache
verwenden, da es zum jetzigen Zeitpunkt auf den gleichen Digest zeigt. Während sich in "php:8-apache" immer die neueste Version 8 mit Bookworm-Basis und Apache befinden wird, ist in "php:8.3.11-apache" immer nur diese eine spezifische Version drin. Analog dazu gibt es auch "php:8.3-apache", in welchem dann regelmäßig neue Patch-Versionen landen.