Beide Seiten der vorigen Revision
Vorhergehende Überarbeitung
Nächste Überarbeitung
|
Vorhergehende Überarbeitung
|
docker [2025/06/11 13:14] jango [Netzwerke] |
docker [2025/06/22 03:46] (aktuell) jango [Registry] |
Docker ist eine Open-Source-Plattform zur [[container|Containerisierung]] von Anwendungen. Es ermöglicht die Erstellung, Bereitstellung und Ausführung von Anwendungen in isolierten Containern, die unabhängig von der zugrunde liegenden Infrastruktur sind. Docker bietet eine standardisierte Methode zum Verpacken von Software und allen damit verbundenen Abhängigkeiten in ein einzelnes Paket, das als Docker-Image bezeichnet wird. Diese Images können dann auf jedem System ausgeführt werden, das Docker unterstützt. | Docker ist eine Open-Source-Plattform zur [[container|Containerisierung]] von Anwendungen. Es ermöglicht das Erstellen, Bereitstellen und Ausführen von Anwendungen in isolierten Containern, die alle notwendigen Abhängigkeiten enthalten und plattformunabhängig betrieben werden können. |
| |
Docker basiert auf der Linux-Containertechnologie ([[LXC]]) und nutzt die Funktionen des Linux-Kernels, um isolierte Umgebungen, sogenannte Container, zu erstellen. Jeder Container enthält eine eigenständige und isolierte Umgebung, in der eine Anwendung und ihre Abhängigkeiten ausgeführt werden können. Die Isolation sorgt dafür, dass eine Anwendung und ihre Abhängigkeiten unabhängig von anderen Containern und dem Hostsystem ausgeführt werden können, was zu einer besseren Portabilität und Skalierbarkeit führt. | Ursprünglich auf LXC basierend, nutzt Docker heute seine eigene Laufzeit (runc) und baut auf Funktionen des Linux-Kernels wie Namespaces und Control Groups auf, um die Isolation der Container sicherzustellen. Diese Architektur sorgt für hohe Portabilität, effiziente Ressourcennutzung und einfache Skalierbarkeit von Anwendungen. |
| |
Siehe auch [[kubernetes|Kubernetes]]. | Siehe auch [[kubernetes|Kubernetes]]. |
|[[https://docs.docker.com/engine/network/drivers/host/|Host]]|Das Host-Netzwerkmodell verwendet das Netzwerk des Docker-Hosts direkt für die Container. Container, die das Host-Netzwerk verwenden, haben Zugriff auf alle Netzwerkressourcen des Hosts, einschließlich der Netzwerkschnittstellen und Ports. Dieses Modell bietet eine maximale Leistung, kann aber die Isolation zwischen Containern beeinträchtigen.| | |[[https://docs.docker.com/engine/network/drivers/host/|Host]]|Das Host-Netzwerkmodell verwendet das Netzwerk des Docker-Hosts direkt für die Container. Container, die das Host-Netzwerk verwenden, haben Zugriff auf alle Netzwerkressourcen des Hosts, einschließlich der Netzwerkschnittstellen und Ports. Dieses Modell bietet eine maximale Leistung, kann aber die Isolation zwischen Containern beeinträchtigen.| |
|[[https://docs.docker.com/engine/network/drivers/bridge/|Bridge]]|Ein Bridge-Netzwerk ist das Standardnetzwerkmodell von Docker. Es erstellt ein isoliertes Netzwerk für Container auf dem Docker-Host und ermöglicht die Kommunikation zwischen Containern über einen gemeinsamen Bridge-Dienst. Bridge-Netzwerke sind standardmäßig in Docker aktiviert und bieten eine einfache Möglichkeit, Container zu verbinden.| | |[[https://docs.docker.com/engine/network/drivers/bridge/|Bridge]]|Ein Bridge-Netzwerk ist das Standardnetzwerkmodell von Docker. Es erstellt ein isoliertes Netzwerk für Container auf dem Docker-Host und ermöglicht die Kommunikation zwischen Containern über einen gemeinsamen Bridge-Dienst. Bridge-Netzwerke sind standardmäßig in Docker aktiviert und bieten eine einfache Möglichkeit, Container zu verbinden.| |
|Overlay|Overlay-Netzwerke werden verwendet, um Container über mehrere Docker-Hosts hinweg zu verbinden. Sie ermöglichen es Containern, über Host-Grenzen hinweg zu kommunizieren und eine skalierbare, verteilte Anwendung zu erstellen. Overlay-Netzwerke verwenden spezielle Protokolle wie VXLAN oder IPSec, um Container über das gesamte Cluster hinweg zu vernetzen.| | |[[https://docs.docker.com/engine/network/drivers/overlay/|Overlay]]|Overlay-Netzwerke werden verwendet, um Container über mehrere Docker-Hosts hinweg zu verbinden. Sie ermöglichen es Containern, über Host-Grenzen hinweg zu kommunizieren und eine skalierbare, verteilte Anwendung zu erstellen. Overlay-Netzwerke verwenden spezielle Protokolle wie VXLAN oder IPSec, um Container über das gesamte Cluster hinweg zu vernetzen.| |
|[[https://docs.docker.com/engine/network/drivers/macvlan/|MacVlan]]|Das macvlan Netzwerkmodell ermöglicht es Containern, eine eigene MAC-Adresse zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige MAC-Adresse, die von der des Hosts abweichen kann. Dies ermöglicht es Containern, direkt auf das physische Netzwerk zuzugreifen und mit anderen Geräten zu kommunizieren, als ob sie direkt an das physische Netzwerk angeschlossen wären.| | |[[https://docs.docker.com/engine/network/drivers/macvlan/|MacVlan]]|Das macvlan Netzwerkmodell ermöglicht es Containern, eine eigene MAC-Adresse zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige MAC-Adresse, die von der des Hosts abweichen kann. Dies ermöglicht es Containern, direkt auf das physische Netzwerk zuzugreifen und mit anderen Geräten zu kommunizieren, als ob sie direkt an das physische Netzwerk angeschlossen wären.| |
|IpVlan|Das ipvlan Netzwerkmodell ist ähnlich wie das macvlan Modell, jedoch auf IP-Ebene. Es ermöglicht es Containern, eigene IP-Adressen zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige IP-Adresse, die von der des Hosts abweichen kann.| | |[[https://docs.docker.com/engine/network/drivers/ipvlan/|IpVlan]]|Das ipvlan Netzwerkmodell ist ähnlich wie das macvlan Modell, jedoch auf IP-Ebene. Es ermöglicht es Containern, eigene IP-Adressen zu haben und direkt mit dem physikalischen Netzwerk zu kommunizieren. Jeder Container erhält eine eindeutige IP-Adresse, die von der des Hosts abweichen kann.| |
| |
Mit | Mit |
| |
Docker [[https://docs.docker.com/engine/install/|Installation]]. | Docker [[https://docs.docker.com/engine/install/|Installation]]. |
| |
| ====Installer Script==== |
| Die einfachste Weise ist das Installer Script von der Docker Website. |
| |
<code> | <code> |
</code> | </code> |
| |
====Ubuntu==== | ====Ubuntu Repository==== |
| |
| Es gibt zwei verschiedene Paketquellen (Repositories) für Docker unter Ubuntu. Im offiziellen Ubuntu Repository ist das Paket docker.io erhältlich. Das ist aber oft veraltet und hinkt stark hinterher. Ausserdem wird es nicht direkt von Docker Inc. gepflegt und enthält nur Basis-Docker, keine Compose v2, kein Buildx. |
| |
<code> | <code> |
sudo apt install apt-transport-https ca-certificates curl software-properties-common | sudo apt install docker.io |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | |
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | |
sudo apt update | |
sudo apt install docker-ce | |
</code> | </code> |
| |
<code> | ====Docker Repository==== |
# update packages | |
sudo apt-get update | |
| |
| Dann gibt es noch das offizielle Docker Repository docker-ce (Community Edition). Dieses muss man manuell einbinden (GPG-Key, APT-Repo). Es wird allerdings von Docker inc. selbst gepflegt, ist immer die aktuellste Version und alle Plugins bekommt man auch. |
| |
| <code> |
# add pgp key for signed docker repository | # add pgp key for signed docker repository |
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common | sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common |
</code> | </code> |
| |
====WSL2==== | |
| |
<code> | |
# Install Docker | |
curl -fsSL https://get.docker.com -o get-docker.sh | |
sudo sh get-docker.sh | |
| |
sudo usermod -aG docker $USER | |
| |
# Install Docker Compose v2 | |
sudo apt-get update && sudo apt-get install docker-compose-plugin | |
| |
# Sanity check that both tools were installed successfully | |
docker --version | |
docker compose version | |
| |
# Using Ubuntu 22.04 or Debian 10 / 11? You need to do 1 extra step for iptables | |
# compatibility, you'll want to choose option (1) from the prompt to use iptables-legacy. | |
sudo update-alternatives --config iptables | |
</code> | |
=====Docker Daemon===== | =====Docker Daemon===== |
| |
</code> | </code> |
| |
| =====Registry===== |
| |
| Run a local registry: Quick Version |
| |
| <code> |
| docker run -d -p 5000:5000 --restart always --name registry registry:2 |
| </code> |
| |
| Now, use it from within Docker: |
| |
| <code> |
| docker pull ubuntu |
| docker tag ubuntu localhost:5000/ubuntu |
| docker push localhost:5000/ubuntu |
| </code> |
| See also [[https://hub.docker.com/_/registry]] |
=====Usage===== | =====Usage===== |
| |