Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
linux:docker [2019/04/29 10:43] – adi | linux:docker [2023/12/20 10:43] (aktuell) – [Installation] adi | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
===== Installation ===== | ===== Installation ===== | ||
- | Quelle: [[https:// | + | Quelle: [[https:// |
- | Üblicherweise | + | Man holt sich den Key des Repos, |
- | <code bash> | + | <code bash>sudo apt-get |
+ | sudo apt-get install ca-certificates curl gnupg | ||
+ | sudo install -m 0755 -d / | ||
+ | curl -fsSL https:// | ||
+ | sudo chmod a+r / | ||
- | Nun holt man sich den Key des Repos, installiert diesen und fügt das Repo hinzu. | + | # Add the repository to Apt sources: |
- | <code bash> | + | echo \ |
- | add-apt-repository | + | |
+ | | ||
+ | sudo tee / | ||
+ | sudo apt-get update</ | ||
Danach wird Docker installiert. | Danach wird Docker installiert. | ||
- | <code bash> | + | <code bash>sudo apt-get install docker-ce |
Um die Installation und den Docker-Daemon zu testen, holt man sich den ersten Container und startet diesen. | Um die Installation und den Docker-Daemon zu testen, holt man sich den ersten Container und startet diesen. | ||
Zeile 111: | Zeile 118: | ||
Beispiel < | Beispiel < | ||
* Im Shell Format wird der Befehl mit Shell (''/ | * Im Shell Format wird der Befehl mit Shell (''/ | ||
- | * kann verwendet werden um mehrere gleiche Befehlszeilen zu minimieren \\ Beispiel: < | + | * kann verwendet werden um mehrere gleiche Befehlszeilen zu minimieren \\ Beispiel: < |
nginx \ | nginx \ | ||
mysql</ | mysql</ | ||
Zeile 119: | Zeile 126: | ||
| 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 143: | Zeile 153: | ||
| 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. | ||
+ | |||
+ | === 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/ | ||
+ | Hier ein Beispiel (Quelle: [[https:// | ||
+ | < | ||
+ | ip addr add < | ||
+ | ip link set < | ||
+ | ip route add < | ||
===== Images und Container ===== | ===== Images und Container ===== | ||
Zeile 199: | Zeile 258: | ||
# Install any needed packages specified in requirements.txt | # Install any needed packages specified in requirements.txt | ||
RUN \ | RUN \ | ||
- | apt-get update && \ | + | apt update && \ |
- | apt-get upgrade -y && \ | + | apt upgrade -y && \ |
- | apt-get install -y apt-utils && \ | + | apt install -y apt-utils && \ |
- | cat / | + | cat / |
# set Timezone | # set Timezone | ||
Zeile 492: | Zeile 551: | ||
* **Volumes**: | * **Volumes**: | ||
* **Container**: | * **Container**: | ||
- | * **Image**: Wenn ein Image umzieht, beinhaltet das Tar nur die Daten des Images. Mit dem Befehl '' | + | * **Image**: Wenn ein Image umzieht, beinhaltet das Tar nur die Daten des Images. Mit dem Befehl '' |
* Save/Load | * Save/Load | ||
Zeile 501: | Zeile 560: | ||
* **sichern** <code bash> | * **sichern** <code bash> | ||
* **importieren** <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, |