Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
docker [2024/10/26 23:40] root [Befehle] |
docker [2024/10/29 21:21] (aktuell) root [Registries] |
||
---|---|---|---|
Zeile 31: | Zeile 31: | ||
|-i|Interaktiv. Eingaben im Terminal werden an Docker übertragen. Sinnvoll wenn man zum Beispiel eine Shell im Container gestartet hat. Es wird an stdin attached| | |-i|Interaktiv. Eingaben im Terminal werden an Docker übertragen. Sinnvoll wenn man zum Beispiel eine Shell im Container gestartet hat. Es wird an stdin attached| | ||
|-p < | |-p < | ||
- | |-v <local dir>:< | + | |-v <Source>:< |
+ | * Source: | ||
+ | * Verzeichnis auf dem Host -> dann wird dieses Verzeichnis auf das Ziel gemountet | ||
+ | * Name -> dann wird ein Volume (ein Verzeichnis mit dem gegebenen Namen unter / | ||
+ | * weggelassen (inkl. dem ":" | ||
+ | * Container Dir: | ||
+ | * das Verzeichnis im Container wohin gemountet werden soll. | ||
+ | |||
+ | **Hinweis: | ||
+ | </ | ||
|-e Variable=Wert|Setzt eine Umgebungsvariable (Environmentvariable) im Container auf einen bestimmten Wert. \\ Nützlich wenn bestimmte Dinge in der darin laufenden Applikation dynamisch gesetzt werden sollen| | |-e Variable=Wert|Setzt eine Umgebungsvariable (Environmentvariable) im Container auf einen bestimmten Wert. \\ Nützlich wenn bestimmte Dinge in der darin laufenden Applikation dynamisch gesetzt werden sollen| | ||
|--name < | |--name < | ||
Zeile 37: | Zeile 46: | ||
|--cpus < | |--cpus < | ||
|--memory < | |--memory < | ||
+ | |--mount|Hängt ein Volume oder ein Verzeichnis in den Container ein - so wie -v. \\ < | ||
+ | <sxh bash> | ||
+ | docker run --mount type=< | ||
+ | </ | ||
+ | |||
+ | Die Optionen von --mount müssen hintereinander weg, ohne Leerzeichen angegeben werden. | ||
+ | |||
+ | ^Option ^Beschreibung ^ | ||
+ | |< | ||
+ | * bind -> ein Verzeichnis des Hosts wird als Verzeichnis im Container eingehängt | ||
+ | * volume -> ein Docker-Volume -> Verzeichnis unter / | ||
+ | * tmpfs -> ein temporäres (nur im Speicher existentes) Dateisystem wird in den Container eingehängt. Dieses wird gelöscht sobald der Container gestoppt wird (ist für temporäre Dateien) | ||
+ | </ | ||
+ | |source|Abhängig von type. \\ < | ||
+ | * volume -> Name den das volume haben soll. Optional, ansonsten wird ein numerischer Name vergeben | ||
+ | * bind -> Pfad zum Verzeichnis auf dem Host was in den Container gemountet werden soll | ||
+ | </ | ||
+ | |destination|Pfad im Container in den gemountet werden soll| | ||
+ | </ | ||
+ | |--link < | ||
+ | |--network < | ||
+ | ^Netzwerkname ^Beschreibung^ | ||
+ | |none|Kein Netzwerk| | ||
+ | |host|Das Hostnetzwerk. Alle Ports sind direkt "nach außen" | ||
+ | |< | ||
+ | </ | ||
</ | </ | ||
|docker start < | |docker start < | ||
Zeile 81: | Zeile 116: | ||
|create < | |create < | ||
</ | </ | ||
+ | |docker network|Verwaltet die Netzwerke \\ \\ < | ||
+ | ^Unterbefehl ^Beschreibung ^ | ||
+ | |create < | ||
+ | ^Option ^Beschreibung ^ | ||
+ | |--driver|Welcher Netzwerktreiber genutzt werden soll - optional. \\ Default: Bridge < | ||
+ | * bridge - Default, stellt ein Subnetz zur Verfügung was über eine Bridge mit dem Host verbunden ist | ||
+ | * overlay - wird bei Docker Swarm genutzt | ||
+ | </ | ||
+ | |--subnet|Welches Subnetz verwendet werden soll - otpional. \\ Wird es nicht angegeben vergibt Docker automatisch eins. \\ < | ||
+ | </ | ||
+ | |inspect < | ||
+ | |connect < | ||
+ | |disconnect < | ||
+ | </ | ||
====== Dockerfile ====== | ====== Dockerfile ====== | ||
Zeile 196: | Zeile 244: | ||
+ | ======= Layered Approach ======= | ||
+ | |||
+ | * Ein Image besteht aus Layern (Schichten) | ||
+ | * Jeder Befehl im Dockerfile bildet eine eigene Schicht | ||
+ | * die nächste Schicht speichert jeweils nur die Veränderungen gegenüber der vorhergehenden Schicht | ||
+ | * ein Container bildet eine beschreibbare (für die Zeit die der Container existiert) Schicht oberhalb aller Schichten des Containers | ||
+ | |||
+ | |||
+ | * Schichten werden als solche gespeichert (gecached) | ||
+ | * hat den Vorteil das man wenn man das Dockerfile modifiziert oder basierend auf existierenden Schichten ein neues baut, nur die neuen/ | ||
+ | |||
+ | |||
+ | ====== Volumes ====== | ||
+ | |||
+ | Man kann Verzeichnisse, | ||
+ | Das ist sinnvoll wenn: | ||
+ | |||
+ | * Viel auf geschrieben/ | ||
+ | * Container haben zwar einen beschreibbaren Layer, aber auf Grund des Copy-on-Write-Approaches (Dateien die verändert werden müssen zuerst kopiert werden und dann modifiziert (theoretisch, | ||
+ | * Daten permanent gespeichert werden sollen, unabhängig von der Existenz des Containers | ||
+ | * alles was im Container gespeichert wird geht mit dem löschen (nicht dem stoppen) des Containers verloren | ||
+ | |||
+ | Ggf. kann man auch den Storage-Treiber für den Container ändern um mehr Schreibperformance innerhalb des Containers rauszuholen, | ||
====== Dateien/ | ====== Dateien/ | ||
Zeile 203: | Zeile 274: | ||
|/ | |/ | ||
|/ | |/ | ||
+ | |||
+ | |||
+ | ======= Registry ====== | ||
+ | |||
+ | |||
+ | ===== Image beziehen ===== | ||
+ | |||
+ | * Standardmäßig wird von docker.io geladen | ||
+ | |||
+ | Von einer anderen Registrie laden: | ||
+ | <sxh bash> | ||
+ | docker login | ||
+ | docker run < | ||
+ | </ | ||
+ | |||
+ | * docker login muss nur ausgeführt werden wenn ein Benutzer-Name und Passwort für den Zugang notwendig ist und auch nur einmal pro Sitzung | ||
+ | * < | ||
+ | * < | ||
+ | * < | ||
+ | * <Tag> -> Tag des Images | ||
+ | |||
+ | |||
+ | ===== Image in private Registry pushen ===== | ||
+ | |||
+ | <sxh bash> | ||
+ | docker tag < | ||
+ | docker login | ||
+ | docker push < | ||
+ | </ | ||
+ | |||
+ | * docker tag gibt einem Image einen (zusätzlichen) Namen. Der Name bei privaten Registries enthält den Namen der Registy | ||
+ | * Host -> Host, z.B. myregistry.de | ||
+ | * kann auch localhost sein wenn die Registry auf dem gleichen Host läuft | ||
+ | * Port -> anzugeben wenn der Port nicht 5000 ist | ||
+ | * Pfad -> optional ein Pfad, z.B. myusername | ||
+ | * Imagename -> der Name des Images, z.B. meineApp | ||
+ | * Tag -> Optional ein Tag, z.B. testing | ||
+ | * docker tag baseimage myregistry.de: | ||
+ | * docker login | ||
+ | * nur notwendig wenn die Registry eine Authentifizierung benötigt | ||
+ | * docker push lädt das neue Image hoch | ||
+ | * < | ||
+ | * kompletter Name, inkl. Registry | ||
+ | * so muss das Image auch per docker pull oder docker run angesprochen werden | ||
+ | ===== Private Restry aufsetzen ===== | ||
+ | |||
+ | * Docker Registry ist als Image verfügbar -> Resistry | ||
+ | * es lauscht standardmäßig an Port 5000 | ||
+ | |||
+ | |||
+ | |||
====== Troubleshooting ====== | ====== Troubleshooting ====== | ||