Mittlerweile, dank Multi Arch Richtlinien, ist traefik für viele andere Plattformen offiziell erhältlich. In diesem Fall zu finden als
arm64v8/traefik
https://hub.docker.com/r/arm64v8/traefik/
Von daher ist mein Image als veraltet gekennzeichnet und wird nicht mehr gepflegt.
Træfɪk ist ein Reverse Proxy Server + Load Balancer und erleichtert die (automatisierte) Bereitstellung von Docker Containern erheblich. Traefik nutze ich Zusammenspiel mit dnsmasq. Das Image, was ich für den Odroid C2 gebaut habe ist im Docker Hub verfügbar:
* Dockerfiles: https://github.com/datenfahrt/aarch64-traefik
* Image: https://hub.docker.com/r/datenfahrt/aarch64-traefik/
<code bash>
$ docker run -d –name traefik -p 8080:8080 -p 80:80 -p443:443 -v /var/run/docker.sock:/var/run/docker.sock datenfahrt/aarch64-traefik
</code>
Folgende config.toml wird genutzt
################################################################ # Web configuration backend ################################################################ traefikLogsFile = "/app/log/traefik.log" accessLogsFile = "/app/log/access.log" defaultEntryPoints = ["http", "https"] [web] address = ":8080" # SSL certificate and key used (ssl enabled, ui over https://docker.local:8080) CertFile = "/app/cert/tls.crt" KeyFile = "/app/cert/tls.key" # To enable more detailed statistics [web.statistics] RecentErrors = 10 ################################################################ # Docker configuration backend ################################################################ [docker] domain = "docker.lan" watch = true [entryPoints] [entryPoints.http] address = ":80" [entryPoints.https] address = ":443" [entryPoints.https.tls] [[entryPoints.https.tls.certificates]] CertFile = "/app/cert/tls.crt" KeyFile = "/app/cert/tls.key"
Auf der Projektseite wird die Konfiguration erleutert:
Im heimischen LAN wird dnsmasq des Openwrt Router genutzt um die Domain docker.lan
aufzulösen:
# /etc/dnsmasq.conf # .. address=/.docker.lan/192.168.1.126
Dnsmasq habe ich ebenfalls in ein Image gepackt und kann, soferm man kein Router mit erweiterter DNS Konfiguration nutzt, leicht ins heimische Netz eingebunden werden:
https://hub.docker.com/r/datenfahrt/aarch64-dnsmasq/
Falls man ein Router mit EdgeOS (hier ein Ubiquiti EdgeRouter X) einsetzt, kann man dies über das CLI erledigen:
set service dns forwarding options 'address=/.docker.lan/192.168.1.126'
Traefik unterstützt auch Lets Encrypt - ist für das heimische LAN aber nicht wirklich angezeigt. Im Docker Image befindet sich ein Testzertifikat zum schnellen Einstieg.
$ openssl req -newkey rsa:2048 -nodes -keyout cert/tls.key -x509 -days 365 -out cert/tls.crt
Eigene Konfiguration:
$ docker run -d --name traefik -v /path/to/cert:/app/cert -v /path/to/config.toml:/app/config.toml -p 8080:8080 -p 80:80 -p 443:443 -v /var/run/docker.sock:/var/run/docker.sock datenfahrt/aarch64-traefik:latest
Wenn zb Portainer läuft, ergibt sich folgende Adresse
Image, Dockerfile:
# Dockerfile.. LABEL traefik.enable="false"
Container (Beispiel):
$ docker run --name mywebapp -p 8010:80 --label traefik.enable="false" -d superduperwebapp
Beispiel Adresse http://yourhost.local/mydir
--label "traefik.frontend.rule=Host:yourhost.local;PathPrefixStrip:/mydir"
--label "traefik.frontend.passHostHeader=true"
Dst Port festlegen
--label "traefik.port=3000"
--label "passTLSCert=true"
labels: - "traefik.port=80" - "traefik.frontend.rule=Host:meineseite.example.com" - "traefik.enable=true" - "traefik.frontend.passHostHeader=true" - "traefik.docker.network=proxy" - "traefik.frontend.headers.STSSeconds=315360000" - "traefik.frontend.headers.STSIncludeSubdomains=true" - "traefik.frontend.headers.STSPreload=true"