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 [2021/05/05 09:03] – [Docker umziehen] adilinux:docker [2022/08/09 15:00] – [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 145: Zeile 148:
 | 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>) | | 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 | | 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: **IST IN VERSION 3 DEPRECATED**) 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.
 +
 +=== Route von/zu Docker-Host ===
 +Generell sind Docker Container, welche sich in einem macvlan befinden, vom Docker Host isoliert (obwohl beide vielleicht im selben Subnetz sind.
 +Damit man die Verbindung wiederherstellen kann, muss eine Netzworkbridge mit einer entspr. Route zum Container/-Netzwerk erstellt werden.
 +Hier ein Beispiel (Quelle: [[https://www.networkshinobi.com/docker-host-cant-access-containers-running-on-macvlan/]]):
 +<code>ip link add <NAME_CUSTOM_BRIDGE_DEVICE> link <PHYSICAL_LINKED_DEVICE_TO_NETWORK> type macvlan mode bridge
 +ip addr add <IP_ADDRESS_FROM_MACVLAN> dev <NAME_CUSTOM_BRIDGE_DEVICE>
 +ip link set <NAME_CUSTOM_BRIDGE_DEVICE> up
 +ip route add <IP_ADDRESS_FROM_CONTAINER_IN_MACVLAN>/32 dev <NAME_CUSTOM_BRIDGE_DEVICE></code>
 ===== Images und Container ===== ===== Images und Container =====
  
Navigation
Drucken/exportieren
QR-Code
QR-Code Docker (erstellt für aktuelle Seite)