1. Set up Docker's apt repository.
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
2. Install the Docker packages.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
The Docker service starts automatically after installation. To verify that Docker is running, use:
sudo systemctl status docker
Some systems may have this behavior disabled and will require a manual start:
sudo systemctl start docker
Docker supports multiple network drivers. The most common ones for connecting containers to your physical network or creating internal isolated environments are:
docker network create -d ipvlan --subnet=[CIDR] --gateway=[GatewayIP] -o parent=[InterfaceName] -o ipvlan_mode=[l2|l3] [NetworkName]
Ersetze
[CIDR] durch deine Netzwerkdaten,
[GatewayIP] durch die IP-Adresse deines Routers/Gateways,
[InterfaceName] durch den Interface-Namen (z. B.eth0odereth0.100),
[l2|l3] je nach gewünschtem Modus (l2ist Standard),
[NetworkName] durch den gewünschten Alias im Docker-Network.
docker network create -d ipvlan --subnet 192.168.179.0/24 --gateway 192.168.179.1 -o parent=eth0 -o ipvlan_mode=l2 lan-ipvlan
docker network create -d ipvlan --subnet 10.10.10.0/24 --gateway 10.10.10.1 -o parent=eth0 -o ipvlan_mode=l3 app-l3
⚠️ Hinweis:
Bei ipvlan l3 muss auf dem Gateway eine statische Route zum Container-Subnet eingerichtet werden (z. B.ip route add 10.10.10.0/24 via 192.168.179.10).
docker network create -d macvlan --subnet=[CIDR] --gateway=[GatewayIP] -o parent=[InterfaceName] -o macvlan_mode=[bridge|private|vepa|passthru] [NetworkName]
Ersetze
[CIDR], [GatewayIP], [InterfaceName] (z. B.eth0odereth0.100),
[macvlan_mode] (Standard:bridge),
[NetworkName] durch den gewünschten Alias im Docker-Network.
docker network create -d macvlan --subnet 192.168.179.0/24 --gateway 192.168.179.1 -o parent=eth0 lan-macvlan
docker network create -d macvlan --subnet 192.168.100.0/24 --gateway 192.168.100.1 -o parent=eth0.100 vlan100-macvlan
Standardmäßig können Host und Macvlan-Container nicht direkt miteinander kommunizieren.
Um dies zu ermöglichen, kann auf dem Host ein zusätzliches Macvlan-Interface erstellt werden:
ip link add macvlan0 link eth0 type macvlan mode bridge
ip addr add 192.168.179.2/24 dev macvlan0
ip link set macvlan0 up
Danach ist Kommunikation zwischen Host und Macvlan-Containern im gleichen Subnetz möglich.
docker network create -d bridge --subnet=[CIDR] --gateway=[GatewayIP] -o com.docker.network.bridge.name=[br-NetworkName] -o com.docker.network.driver.mtu=[MTU] -o com.docker.network.bridge.enable_ip_masquerade=[true|false] -o com.docker.network.bridge.enable_icc=[true|false] [NetworkName]
Hinweis:
- Kein
parent-Interface möglichenable_ip_masquerade=trueaktiviert NAT ins Upstream-Netzenable_icc=trueerlaubt Kommunikation zwischen ContainernMTUbei VPNs ggf. auf 1450 setzen
docker network create -d bridge --subnet 172.20.0.0/24 --gateway 172.20.0.1 -o com.docker.network.bridge.name=br-myapp -o com.docker.network.driver.mtu=1500 -o com.docker.network.bridge.enable_ip_masquerade=true -o com.docker.network.bridge.enable_icc=true my-bridge
Bei macvlan und ipvlan kann VLAN-Tagging verwendet werden, indem das Parent-Interface als Subinterface angegeben wird.
docker network create -d ipvlan --subnet 192.168.100.0/24 --gateway 192.168.100.1 -o parent=eth0.100 -o ipvlan_mode=l2 vlan100-ipvlan
Voraussetzung: VLAN 100 ist am Switch/Trunk-Port erlaubt.
docker network create -d macvlan --ipv6 --subnet 192.168.179.0/24 --gateway 192.168.179.1 --subnet fd42:179::/64 --gateway fd42:179::1 -o parent=eth0 lan6-macvlan
Dual Stack (IPv4 + IPv6) möglich.
Bei globalem IPv6 müssen RA/DHCPv6-Anpassungen am Gateway erfolgen.
docker run -d --name web --network lan-macvlan nginx:alpine
docker run -d --name web --network lan-macvlan --ip 192.168.179.50 nginx:alpine
Achte darauf, dass statische IPs nicht im DHCP-Bereich des Routers liegen.
version: "3.9"
services:
web:
image: nginx:alpine
networks:
lan:
ipv4_address: 192.168.179.50
networks:
lan:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.179.0/24
gateway: 192.168.179.1
ip_range: 192.168.179.32/28
ip link add macvlan0 ...).eth0.<vlanid> angeben.| Ziel / Umgebung | Empfehlung |
|---|---|
| Container sollen direkt im LAN/VLAN sichtbar sein | macvlan oder ipvlan l2 |
| Reines Routing ohne L2-Abhängigkeit | ipvlan l3 |
| Lokale Kommunikation + NAT | bridge |
https://github.com/MatchbookLab/local-persist
unter debian 12 und neuer ist der manuelle Weg empfohlen.
Manual Way
If you're uncomfortable running a script you downloaded off the internet with sudo, you can extract any of the steps out of the install.sh script and run them manually. However you want to do it, the main steps are:
27.02.23 | docker container starten nach Kernal Update nicht mehr
sudo apt install appamor
reboot now
sudo mkdir -p /opt/secrets
sudo sh -c 'echo "DEIN_SECRET" > /opt/secrets/secret-file-name'
sudo chown root:root /opt/secrets/secret-file-name
sudo chmod 600 /opt/secrets/secret-file-name
docker network inspect mailnet | jq '.[0].IPAM' # IPAM prüfen
ip link show docker-mailnet # Bridge auf dem Host