Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
linux:docker [2020/05/29 20:44] adilinux:docker [2022/07/31 13:42] – [MACVLAN] adi
Zeile 119: Zeile 119:
 | Entrypoint | * wird verwendet um Befehle nach dem Start des Containers auszuführen \\ * wird auch ausgeführt wenn der ''docker run'' Befehl einen Standard Befehl am Ende ausführt \\ * wenn im Shell Format angegeben, wird jeder CMD Befehl ignoriert  | ja | | Entrypoint | * wird verwendet um Befehle nach dem Start des Containers auszuführen \\ * wird auch ausgeführt wenn der ''docker run'' Befehl einen Standard Befehl am Ende ausführt \\ * wenn im Shell Format angegeben, wird jeder CMD Befehl ignoriert  | ja |
 | CMD  | * wird verwendet um eine Standard Befehl nach dem start des Containers abzusetzen \\ * Wenn beim ''docker run'' Befehl ein Standard Befehl am Ende angegeben wird, wird ''CMD'' ignoriert \\ * Kann auch verwendet werden um nur Parameter an ''ENTRYPOINT'' zu übergeben, wenn kein Standard Befehl beim ''docker run'' übergeben wird, wird der ENTRYPOINT ausgeführt | nein (bzw. nur der letzte ''CMD''-Befehl wird ausgeführt) | | CMD  | * wird verwendet um eine Standard Befehl nach dem start des Containers abzusetzen \\ * Wenn beim ''docker run'' Befehl ein Standard Befehl am Ende angegeben wird, wird ''CMD'' ignoriert \\ * Kann auch verwendet werden um nur Parameter an ''ENTRYPOINT'' zu übergeben, wenn kein Standard Befehl beim ''docker run'' übergeben wird, wird der ENTRYPOINT ausgeführt | nein (bzw. nur der letzte ''CMD''-Befehl wird ausgeführt) |
 +===== Konfigurationsparameter =====
 +Mögliche Parameter für Konfigurationen können in den Reference-Docs unter docker.com eingesehen werden [[https://docs.docker.com/reference/]].
 +
 ===== Nützliche Befehle ===== ===== Nützliche Befehle =====
 dem Befehl ''docker'' können verschiedene Parameter übergeben werden. dem Befehl ''docker'' können verschiedene Parameter übergeben werden.
Zeile 143: Zeile 146:
 | logs <CONTAINER_ID> | zeigt logs über den jew. Container | | logs <CONTAINER_ID> | zeigt logs über den jew. Container |
 | inspect <CONTAINER_ID> | zeigt ausführliche Infos über den jew. Container | | inspect <CONTAINER_ID> | zeigt ausführliche Infos über den jew. Container |
-| attach <CONTAINER_ID> | Verbindet sich zum Container auf die Konsole (detach per <key>STRG</key>+<key>p</key> und danach <key>STRG</key>+<key>q</key>) |+| attach <CONTAINER_ID> | Verbindet sich zum Container zum Standard Input/Output Terminal (detach per <key>STRG</key>+<key>p</key> und danach <key>STRG</key>+<key>q</key>) | 
 +| exec -it <CONTAINER_ID> /bin/bash | Verbindet sich zu einer Bash-Shell zum Container | 
 + 
 +===== Netzwerk ===== 
 +Docker verfügt über folgende Treiber für die Netzwerkanbindung eines Containers: 
 + 
 +^ Treiber ^ Beschreibung ^ 
 +| bridge | Das ist der Standard, wenn ein Container erstellt wird; befindet sich im NET-Netz hinter der Host Adresse | 
 +| host | Nutzt die Netzwerkschnittstelle des Hosts und ist direkt an dessen IP-Adresse gebunden | 
 +| overlay | Wird verwendet wenn mehrere Docker Hosts sich ein Container-Netzwerk teilen sollen | 
 +| macvlan | Layer 3 Netzwerk; kann verwendet werden um Container direkt an das Netzwerk mit einer eigenen IP-Adresse anzubinden (z.B. mehrere VLANs ) \\ Es können für die Container Netzwerschnittstelle IP-Adressen oder MAC-Adressen definiert werden | 
 +| iplan | ähnlich wie macvlan der nur Layer 2 | 
 + 
 +Möchte man die IP-Adressen eines Containers ausgeben lassen, dann macht man das mit ''docker container inspect <CONTAINER_NAME>''
 +Sollen alle IP-Adressen aller Container ausgegeben werden, so kann man diesen Befehl verwenden. 
 +Hierbei muss beachtet werden, wie der Container angebunden ist, so ist der Befehl ggf. anzupassen. 
 +<code bash>docker inspect -f '{{.Name}}-{{range .NetworkSettings.Networks}} {{.IPAddress}}{{end}}' $(docker ps -aq)</code> 
 + 
 +==== MACVLAN ==== 
 +Bei einem macvlan Netzwerk, werden die Container direkt im Netzwerk behandelt wie jeder normale Host. Sie sind quasi mit einer eigenen Netzwerkschnittstelle im Netzwerk präsent. 
 +Container können mit dem Parameter ''ip_address'' (docker-compose) eine eigene feste IP-Adresse besitzen. 
 +Soll ein DHCP-Server die IP-Adressen verwalten, so muss man bedenken, dass sich die MAC-Adresse eines Containers ändert, wenn dieser oder der Docker-Daemon neugestartet wird. 
 +Dies kann mit dem Parameter ''mac_address'' (docker-compose) angepasst werden und eine eindeutige MAC-Adresse vergeben werden. 
 + 
 +MAC-Adressen werden vom Docker-Daemon generiert. Hier ein Auszug aus der [[https://docs.docker.com/engine/reference/run/#network-settings|Docker Reference]]: <code>By default, the MAC address is generated using the IP address allocated to the container. 
 +You can set the container’s MAC address explicitly by providing a MAC address via the --mac-address parameter (format:12:34:56:78:9a:bc). 
 +Be aware that Docker does not check if manually specified MAC addresses are unique.</code> 
 + 
 +Eine einzigartige MAC-Adresse kann sich man aber relativ leicht zusammenstellen. 
 +Wie immer geben die ersten 3 Stellen der MAC-Adresse den Hersteller (also die OUI => Organizationally Unique Identifier, „organisatorisch eindeutige Kennung“) an, bei Docker ist dies aber nicht der Fall. 
 +Ein Docker-Daemon hat in diesem Fall die ersten 2 Stellen generiert, es geht also nur um die letzten 4 Stellen. 
 + 
 +Dazu nimmt man einen Dezimal / Hexadezimal Rechner und wandelt die letzten 4 Oktette der IP-Adresse des Containers um. 
 + 
 +Beispiel: 
 +generierte MAC-Adresse: ''02:42:c0:a8:8a:0b'' 
 +Hier sind die Stellen ''02:42'' die festen Angaben, die letzten 4 würden in Dezimal folgendes ergeben ''192:168:138:11''
 +Dies ist die IP-Adresse des Containers. 
 + 
 +Hat man einen DCHP-Server, kann man bei diesem eine IP-Adresse für einen Container reservieren. 
 +Danach rechnet man diese in Hexadezimal um und erhält somit die eindeutige MAC-Adresse.
 ===== Images und Container ===== ===== Images und Container =====
  
Zeile 492: Zeile 535:
   * **Volumes**: Laufzeitdaten können vom Pfad ''/var/lib/docker/volumes/<VOLUME_NAME>'' gesichert werden. \\ Auf dem neuen Host einfach in ein neues Volume erstellen und die Daten dort hineinkopieren/rsyncen/... Dann das Image, als Tar, vom alten auf den neuen Host umziehen (''docker save/load''). \\ Container erstellen (''docker run'') und auf das neue Volume verweisen.   * **Volumes**: Laufzeitdaten können vom Pfad ''/var/lib/docker/volumes/<VOLUME_NAME>'' gesichert werden. \\ Auf dem neuen Host einfach in ein neues Volume erstellen und die Daten dort hineinkopieren/rsyncen/... Dann das Image, als Tar, vom alten auf den neuen Host umziehen (''docker save/load''). \\ Container erstellen (''docker run'') und auf das neue Volume verweisen.
   * **Container**: Daten des Images und die Laufzeitdaten liegen im erstellten Tar. Dann Tar importieren und den Container mit dem neuen Image starten.   * **Container**: Daten des Images und die Laufzeitdaten liegen im erstellten Tar. Dann Tar importieren und den Container mit dem neuen Image starten.
-  * **Image**: Wenn ein Image umzieht, beinhaltet das Tar nur die Daten des Images. Mit dem Befehl ''docker commit'' lassen sich Imagedaten und Containerdaten zusammenführen. So entsteht eine neues eigenes Image. \\ Dies wie oben beschrieben umziehen und den Container mit dem eigenen Image starten.+  * **Image**: Wenn ein Image umzieht, beinhaltet das Tar nur die Daten des Images. Mit dem Befehl ''docker commit'' lassen sich Imagedaten und Containerdaten zusammenführen. So entsteht ein neues eigenes Image. \\ Dies wie oben beschrieben umziehen und den Container mit dem eigenen Image starten.
  
   * Save/Load   * Save/Load
Navigation
Drucken/exportieren
QR-Code
QR-Code Docker (erstellt für aktuelle Seite)