Traefik nutze ich primär um als reverse proxy von extern auf meine Docker Container zugreifen zu können. Dies natürlich SSL terminiert. Verschiedene Dienste sollen allerdings nicht extern erreichbar sein und benötigen auch – aus meiner Sicht – nicht zwingend eine verschlüsstele Verbindung.
Aus diesem Grund habe ich auf meinem internen Docker Server Traefik als reverse proxy laufen, welcher den verschiedenen Diensten via netzwerkinterner DNS-Auflösung ein DNS Namen verpasst. So kann ich z. B. via http://phpipam.docker.domain.local auf mein PHPIPAM Dienst zugreifen.
Voraussetzungen
Docker Host
Bereits eingerichtet Services (ich empfehle die Services intern immer erst mal rudimentär zu testen und dann zu erweitern)
Auf meinem Windows DNS Server lege ich im DNS eine neue primäre Zone mit dem Namen „docker.domain.local“ (entsprechend an deine Bedürfnisse anpassen). Diese erhält dann einen einzigen A-Record der als Wildcard auf den Docker-Host zeigt.Screenshot aus dem Windows DNS
Traefik einrichten
Um Traefik dann nutzen zu können, bediene ich mich zum Teil meiner vorhandenen Docker-Compose Sammlung auf Github. Den Traefik Container und die traefik.toml Datei wird dabei ein wenig angepasst.
class="wp-block-code">``` --- version: '3.3' services: traefik: image: traefik:latest container_name: traefik volumes: - /var/run/docker.sock:/var/run/docker.sock - $PWD/config:/etc/traefik - /etc/localtime:/etc/localtime ports: - "80:80" restart: always networks: - default - traefik_proxy networks: traefik_proxy: external: name: traefik_proxy default: driver: bridge ``` ``` Anschließend lässt sich der Container starten und ist bereit um Container als reverse proxy anzubieten.
>
View this post on [Instagram](https://www.instagram.com/teqqyde/)
[Als kleiner Dank von den Damen und Herren bei Containous. 💜 Bei meinen Anleitungen und Docker Projekten nutze ich gerne #Traefik als Proxy.](https://www.instagram.com/p/B7gD9-cKzxD/?utm_source=ig_embed&utm_campaign=loading) > > A post shared by [ teqqyde | Server & Networking](https://www.instagram.com/teqqydeyt/?utm_source=ig_embed&utm_campaign=loading) (@teqqydeyt) on > >
Bei den anzubietenden Services müssen wir dann natürlich auch noch die Compose Datei anpassen. Beispielhaft hier meine zu phpIPAM: ```
```
---version: '3'services: phpipam-mysql: image: mysql:5.7 container_name: phpipam-mysql restart: unless-stopped volumes: - $PWD/mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=ROOTPASSWORD phpipam-phpipam: image: pierrecdn/phpipam:latest container_name: phpipam-phpipam restart: unless-stopped environment: - MYSQL_ENV_MYSQL_USER=root - MYSQL_ENV_MYSQL_ROOT_PASSWORD=ROOTPASSWORD - MYSQL_ENV_MYSQL_HOST=phpipam-mysql labels: - "traefik.enable=true" - "traefik.http.routers.phpipam-http.entrypoints=web" - "traefik.http.routers.phpipam-http.rule=Host(`phpipam.docker.domain.local`)" #Domain anpassen - "traefik.http.services.phpipam.loadbalancer.server.port=80" depends_on: - phpipam-mysql networks: - traefik_proxy - default networks: traefik_proxy: external: name: traefik_proxy default: driver: bridge
```
```
Anschließend auch noch diese Compose Datei starten und nun lässt sich, wenn alles korrekt eingerichtet wurde, der Service als URL öffnen. So ist es wesentlich einfacherer als ich für jeden Service einen neuen Port überlegen zu müssen.
🍻 Sag Danke
Mit kleinen Gesten kannst du meine Arbeit wertschätzen. Was und wie du das tun kannst, erfährst du hier.