Skip to main content
  1. Posts/

Install Traefik di Docker

·3 mins·
traefik docker traefik
Table of Contents

Traefik adalah modern HTTP reverse proxy dan load balancer untuk memudahkan dalam mendeploy microservices. Traefik dapat diintegrasikan pada infrastruktur Docker, mode Swarm, Kubernetes, Marathon, Consul, Etcd, Rancher, dan Amazon ECS serta dapat melakukan konfigurasi secara otomatis dan dinamis.

Docker CLI
#

Saya asumsikan Anda sudah menginstall docker dan memastikan service docker sudah running.

Buat dan edit file /opt/traefik/traefik.yml untuk konfigurasi docker sebagai backend.

providers:
  docker:
    # Default host rule.
    #
    # Optional
    # Default: "Host(`{{ normalize .Name }}`)"
    # 
    defaultRule: Host(`{{ normalize .Name }}.example.io`)

    # Expose containers by default in traefik
    #
    # Optional
    # Default: true
    #
    exposedByDefault: false
api:
  insecure: true

defaultRule pada konfig tersebut akan membuat setiap container yang dideploy dapat diakses dengan subdomain .example.io.

Install traefik

docker run -dit --name traefik \
-p 8080:8080 -p 80:80 \
-v /opt/traefik/traefik.yml:/etc/traefik/traefik.yml \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik --api=true --api.debug=true --api.dashboard=true --api.insecure=true

Start backend server dengan nama test.

docker run -dit --name test traefik/whoami

Selanjutnya test akses traefik melalui http://test.example.io dengan curl

$ curl http://test.example.io
Hostname: 939bfc511e21
IP: 127.0.0.1
IP: 172.18.0.3
RemoteAddr: 172.18.0.2:53478
GET / HTTP/1.1
Host: test.example.io
User-Agent: curl/7.81.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 192.168.100.100
X-Forwarded-Host: test.example.io
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: 6dd6581a3243
X-Real-Ip: 192.168.100.100

Untuk dashboard traefik dapat diakses melalui http://IP:8080

Docker compose
#

Buat dan edit file docker-compose.yml

version: '3'

services:
  traefik:
    # The official v2 Traefik docker image
    image: traefik:v2.10
    # Enables the web UI and tells Traefik to listen to docker
    command: --api=true --api.debug=true --api.dashboard=true --api.insecure=true
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/traefik/traefik.yml:/etc/traefik/traefik.yml
  
  whoami:
    image: traefik/whoami

Deploy traefik dan whoami.

docker stack deploy -c docker-compose.yml traefik

List container

docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS     NAMES
7da932edbb65   traefik/whoami:latest   "/whoami"                29 minutes ago   Up 29 minutes   80/tcp    traefik_whoami.1.wse70h8bju510mcx9qa36smkt
b5026204c70e   traefik:latest          "/entrypoint.sh --ap…"   29 minutes ago   Up 29 minutes   80/tcp    traefik_traefik.1.wlpw5gztgez348tuos1xtqjqx

Test akses http://traefik_whoami.1.wse70h8bju510mcx9qa36smkt.topan.io dengan curl

$ curl traefik-whoami-1-wse70h8bju510mcx9qa36smkt.topan.io
Hostname: 7da932edbb65
IP: 127.0.0.1
IP: 10.0.6.6
IP: 172.19.0.4
RemoteAddr: 10.0.6.3:47828
GET / HTTP/1.1
Host: traefik-whoami-1-wse70h8bju510mcx9qa36smkt.topan.io
User-Agent: curl/7.81.0
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: traefik-whoami-1-wse70h8bju510mcx9qa36smkt.topan.io
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: b5026204c70e
X-Real-Ip: 10.0.0.2

Service whoami dapat Anda scale sesuai kebutuhan

docker service scale traefik_whoami=10

Notes
#

Berikut merupakan saran untuk deploy traefik dengan docker compose

version: "3.3"

services:

  traefik:
    image: "traefik"
    command:
      - "--log.level=DEBUG"
      - "--accesslog=true"
      - "--accesslog.filepath=/var/log/log.txt"
      - "--accesslog.bufferingsize=100"
      - "--api.insecure=true"
      - "--providers.docker=true"
#      - "--providers.docker.defaultrule=Host(`{{ normalize .Name }}.example.io`)"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "traefik/whoami"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`web5.srv1.de`)"
      - "traefik.http.routers.whoami.entrypoints=web"

Details

  • --log.level=DEBUG Untuk setting log traefik ke level debug. Defaultnya adalah Error.
  • --accesslog=true Mengaktifkan access log
  • --accesslog.filepath=/var/log/log.txt Mengatur file access log ke /var/log/log.txt
  • --accesslog.bufferingsize=100 Melimit baris yang dapat dicatat pada file access log.
  • --api.insecure=true Mengaktifkan api dengan traefik
  • --providers.docker=true Untuk setting docker sebagai backend
  • --providers.docker.exposedbydefault=false Mencegah traefik mengexpose setiap container.
  • --entrypoints.web.address Setting entrypoint web di traefik ke tujuan port 80
  • traefik.enable=true Mengizinkan traefik mengexpose container
  • traefik.http.routers.whoami.rule=Host(example.com) Domain yang akan direspon oleh traefik dan mengarahkan request ke container.
  • traefik.http.routers.whoami.entrypoints Setting entrypoint container ke tujuan service web traefik.

Related

Install Docker
·3 mins
docker linux docker
Install MinIO di Docker
·2 mins
minio docker minio
Install Consul dengan Docker
·2 mins
consul docker consul
Configure Network Aliases Docker
·2 mins
docker docker
Using IPvlan network in Docker
·5 mins
docker docker
Using Host Network in Docker
·1 min
docker docker