Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungNächste ÜberarbeitungBeide Seiten der Revision | ||
linux:docker [2018/08/22 07:16] – [Konfigurationsdateien] adi | linux:docker [2022/07/31 13:42] – [MACVLAN] adi | ||
---|---|---|---|
Zeile 37: | Zeile 37: | ||
< | < | ||
ExecStart= | ExecStart= | ||
- | ExecStart=/ | + | ExecStart=/ |
Die leere " | Die leere " | ||
Zeile 46: | Zeile 46: | ||
Note that the empty ExecStart= is required, as systemctl only will overrule the ExecStart if it is cleared first. | Note that the empty ExecStart= is required, as systemctl only will overrule the ExecStart if it is cleared first. | ||
+ | |||
+ | ===== Autostart der Container nach Boot ===== | ||
+ | Damit die Docker Container nach einem reboot des Docker Hosts automatisch starten, können folgende Methoden angewandt werden: | ||
+ | - starten über Prozessmanager wie '' | ||
+ | - starten über Docker Restart Policies | ||
+ | |||
+ | ==== Systemd ==== | ||
+ | Quelle: [[https:// | ||
+ | Per Befehl '' | ||
+ | **docker-< | ||
+ | <code bash> | ||
+ | Description=< | ||
+ | Requires=docker.service | ||
+ | After=docker.service | ||
+ | |||
+ | [Service] | ||
+ | Restart=always | ||
+ | ExecStart=/ | ||
+ | ExecStop=/ | ||
+ | |||
+ | [Install] | ||
+ | WantedBy=local.target</ | ||
+ | |||
+ | Erklärung: | ||
+ | '' | ||
+ | '' | ||
+ | |||
+ | Nach dem Erstellen des Service diesen noch '' | ||
+ | <code bash> | ||
+ | systemctl enable docker-< | ||
+ | |||
+ | Gestartet werden kann der neue Service über die üblichen '' | ||
+ | |||
+ | ==== Restart Policies ==== | ||
+ | Quelle: [[https:// | ||
+ | |||
+ | Mit dem '' | ||
+ | <code bash> | ||
+ | |||
+ | ^ Restart Policy ^ Beschreibung ^ | ||
+ | | no | Do not automatically restart the container. (the default) | | ||
+ | | on-failure | Restart the container if it exits due to an error, which manifests as a non-zero exit code. | | ||
+ | | always | Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted. (See the second bullet listed in restart policy details) | | ||
+ | | unless-stopped | Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts. | | ||
+ | |||
+ | Mit foldendem Befehl kann man sehen welche Restart Policy aktuell im jew. Container gesetzt ist: | ||
+ | <code bash> | ||
===== Debug ===== | ===== Debug ===== | ||
Zeile 72: | Zeile 119: | ||
| Entrypoint | * wird verwendet um Befehle nach dem Start des Containers auszuführen \\ * wird auch ausgeführt wenn der '' | | Entrypoint | * wird verwendet um Befehle nach dem Start des Containers auszuführen \\ * wird auch ausgeführt wenn der '' | ||
| CMD | * wird verwendet um eine Standard Befehl nach dem start des Containers abzusetzen \\ * Wenn beim '' | | CMD | * wird verwendet um eine Standard Befehl nach dem start des Containers abzusetzen \\ * Wenn beim '' | ||
+ | ===== Konfigurationsparameter ===== | ||
+ | Mögliche Parameter für Konfigurationen können in den Reference-Docs unter docker.com eingesehen werden [[https:// | ||
+ | |||
===== Nützliche Befehle ===== | ===== Nützliche Befehle ===== | ||
dem Befehl '' | dem Befehl '' | ||
Zeile 96: | Zeile 146: | ||
| logs < | | logs < | ||
| inspect < | | inspect < | ||
- | | attach < | + | | attach < |
+ | | exec -it < | ||
+ | |||
+ | ===== 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 '' | ||
+ | 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> | ||
+ | |||
+ | ==== 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 '' | ||
+ | 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-Adressen werden vom Docker-Daemon generiert. Hier ein Auszug aus der [[https:// | ||
+ | You can set the container’s MAC address explicitly by providing a MAC address via the --mac-address parameter (format: | ||
+ | Be aware that Docker does not check if manually specified MAC addresses are unique.</ | ||
+ | |||
+ | 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: | ||
+ | Hier sind die Stellen '' | ||
+ | Dies ist die IP-Adresse des Containers. | ||
+ | |||
+ | Hat man einen DCHP-Server, | ||
+ | Danach rechnet man diese in Hexadezimal um und erhält somit die eindeutige MAC-Adresse. | ||
===== Images und Container ===== | ===== Images und Container ===== | ||
+ | |||
+ | Images werden in Layer aufgeteilt. Einzelne Anweisungen im Dockerfile führen dazu, dass verschieden viele Layer erzeugt werden. Diese Layer sind alle schreibgeschützt. | ||
+ | Erst wenn der Container mit seinem Befehl gestartet wird, erzeugt er einen neuen eigenen letzen Layer, welcher beschrieben werden kann. | ||
+ | Dieser enthält die Daten welche zur Laufzeit hinzugekommen/ | ||
==== Erstellen ==== | ==== Erstellen ==== | ||
Zeile 431: | Zeile 525: | ||
* '' | * '' | ||
* im Dockerfile werden Verzeichnisse im Parameter '' | * im Dockerfile werden Verzeichnisse im Parameter '' | ||
+ | |||
+ | ===== Docker umziehen ===== | ||
+ | Wenn Container/ | ||
+ | Laufzeitdaten können in Images oder aber auch auf Volumes liegen. | ||
+ | Weiterhin ist es absolut wichtig, dass der Container wieder so gestartet wird, wie auf dem ursprünglichen Host. | ||
+ | Man muss also den Befehl für '' | ||
+ | Darüber kann man sich sein run Befehl zusammenbasteln. | ||
+ | |||
+ | * **Volumes**: | ||
+ | * **Container**: | ||
+ | * **Image**: Wenn ein Image umzieht, beinhaltet das Tar nur die Daten des Images. Mit dem Befehl '' | ||
+ | |||
+ | * Save/Load | ||
+ | * **sichern** <code bash> | ||
+ | * **importieren** <code bash> | ||
+ | |||
+ | * Export/ | ||
+ | * **sichern** <code bash> | ||
+ | * **importieren** <code bash> | ||
+ | |||
+ | ===== Portainer ===== | ||
+ | Portainer ist ein Docker Management Tool, welches auch als Container läuft. | ||
+ | Siehe [[https:// | ||
+ | ==== Installation ==== | ||
+ | <code bash> | ||
+ | $ docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v / | ||
+ | ==== Upgrade ==== | ||
+ | <code bash> | ||
+ | docker pull portainer/ | ||
+ | docker container rm portainer</ | ||
+ | Danach einfach Portainer wie bei der Installation beschrieben, |