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 ====== | ||