Den Docker Container kannst du dir vorstellen wie ne minimale VM ohne alles. Also du emulierst nicht nen BIOS, Betriebssystem, Hardware etc. sondern hast nur ne Umgebung in der ne Anwendung laufen kann. Die Anwendung merkt das nicht, dass sie in einem Container läuft und hat die gleichen rechte wie normalerweise, nur halt im Container.
Angenommen du willst jetzt auf einem Server drei verschiedene Versionen einer Software am laufen haben und installierst das ganz normal wirst du schnell Probleme mit Abhänigkeiten etc. bekommen. Außerdem kann ja jedes Programm auch einfach Daten der anderen Version bearbeiten und löschen. Das ist schlecht und das will man vermeiden.
Deshalb bekommt jeder Container ne eigene frische Installation des Base-Images vorgegaukelt und die Daten werden in Volumes gehalten.
Also du kannst in der Shell mal
ausführen. Damit siehst du alle vorhanden Container. Die sind per Default alle Einzelgänger und haben nur Internet und sonst nichts (keine Ports offen etc.).
Listet alle Volumes der Container. Das ist die Festplatte wo die Daten des Containers liegen.
Mit
docker volume inspect NAME
siehst du auch wo der Container liegt.
Für sowas wie einen Webserver willst du jetzt aber den Container ja mit deinem Hostsystem teilen. Dafür gibts sogenannte Bind-Mounts. Damit kann man einen Ordner im Container einfach auf einen lokalen Pfad legen und so kannst du und das Programm im Container auf den Pfad einfach zugreifen und da Daten lesen und schreiben.
Und wenn du den Container neu anlegst und den mount wieder angibst sind die Daten dann noch da.
beim Starten vom Container spezifizierst du das einfach so [code]-v /path/to/music/library:/music" Vor dem Doppelpunkt ist der Lokale Pfad und hinter dem Doppelpunkt der Pfad im Container.
Docker ist sehr praktisch wenn mans verstanden hat.
Am besten stellst du dir vor du hast ne Maschine die nur ein Terminal und ne Internetverbindung hat. Alles andere spezifizierst du beim Start des Containers nach. Also welche Ports offen sind, ob irgendwelche Daten mit anderen Maschinen ausgetauscht werden sollen, ob Geräte vom Host an die Maschine durchgereicht werden sollen etc.
Und Container sind dafür gemacht weggeworfen zu sein, alles was du im Container tust aber nicht in einem Volume gespeichert wird ist beim nächsten Erstellen des Containers weg. So sollte man das auch handhaben und nicht im Container mit apt Dinge updaten etc.
Musst mal die offizielle Doku durchschauen. Chatgpt kann dir in der Hinsicht auch fast alles erklären wenn du fragen hast. Sonst Poste auch hier gerne mal dein Dockerfile.
Achja und es gibt auch noch ne Strategie wenn man mehrere Container auf einmal verwalten will, z.B. wenn du 3 Webserver und eine DB Starten möchtest. Nennt sich Docker Compose.