Home > Software > How to Simplify Reverse Proxy Setup with Traefik and Docker Compose

How to Simplify Reverse Proxy Setup with Traefik and Docker Compose

Anastasios Antoniadis

Share on X (Twitter) Share on Facebook Share on Pinterest Share on LinkedInIn the modern web infrastructure, a reverse proxy is a critical component that plays a pivotal role in managing inbound internet traffic to various services within a server. Traefik stands out as an innovative reverse proxy and load balancer designed for ease of …

Docker (1)

In the modern web infrastructure, a reverse proxy is a critical component that plays a pivotal role in managing inbound internet traffic to various services within a server. Traefik stands out as an innovative reverse proxy and load balancer designed for ease of configuration, especially in dynamic environments like Docker. Its automatic service discovery and configuration make it a preferred choice for developers and system administrators. This article guides you through setting up Traefik as a reverse proxy using Docker Compose, facilitating a simplified approach to routing traffic to your Dockerized applications.

Understanding Traefik and Docker Compose

Traefik automates the task of managing incoming requests, including SSL/TLS termination, load balancing, and more, routing those requests to appropriate backend services. It’s particularly adept in environments with services that may be dynamically added or removed, as it can automatically discover and configure routes without manual intervention.

Docker Compose, on the other hand, allows you to define and run multi-container Docker applications. Using a YAML file, you can configure your application’s services, networks, and volumes, and manage them all with single commands. When used together, Traefik and Docker Compose streamline the deployment and scaling of web applications, with Traefik handling the routing and load balancing for services defined in Docker Compose.

Deploying Traefik with Docker Compose

Step 1: Create a Docker Network

Traefik needs to be on the same network as the services it routes traffic to. Start by creating a dedicated Docker network:

docker network create web

Step 2: Prepare Your Docker Compose File

Create a directory for your project and navigate into it:

mkdir traefik-setup && cd traefik-setup

Inside this directory, create two files: docker-compose.yml and traefik.toml.

  • docker-compose.yml: This file defines the Traefik service and any other services you wish to route traffic to.
  • traefik.toml: Traefik’s configuration file.

Configuring Traefik

First, let’s set up traefik.toml:

[entryPoints]
  [entryPoints.web]
  address = ":80"

[providers]
  [providers.docker]
  exposedByDefault = false

This basic configuration sets up Traefik to listen on port 80 and to discover services on Docker.

Defining Services with Docker Compose

Next, create your docker-compose.yml:

version: '3'

services:
  traefik:
    image: traefik:v2.3
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedByDefault=false"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "./traefik.toml:/etc/traefik/traefik.toml"
    networks:
      - web

  whoami:
    image: containous/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.local`)"
    networks:
      - web

networks:
  web:
    external: true

In this docker-compose.yml, there are two services defined:

  • traefik: The Traefik service with the configuration file mounted and ports 80 (HTTP) and 8080 (Traefik dashboard) exposed. It listens for Docker events and automatically discovers services.
  • whoami: A simple service that returns information about the request for demonstration purposes. It’s labeled for Traefik to route traffic to it based on the host whoami.local.

Step 3: Start Your Services

With your configuration files in place, start your services using Docker Compose:

docker-compose up -d

Step 4: Testing the Setup

To test if Traefik is correctly routing traffic to your whoami service, edit your hosts file (/etc/hosts on Linux and macOS, C:\Windows\System32\drivers\etc\hosts on Windows) and add an entry for whoami.local pointing to your Docker host (usually 127.0.0.1 for local setups).

127.0.0.1 whoami.local

Now, open a browser and navigate to http://whoami.local. You should see a response from the whoami service.

Additionally, you can access Traefik’s dashboard by going to http://localhost:8080.

Best Practices and Considerations

  • Security: For production environments, it’s crucial to secure your Traefik dashboard with authentication and consider enabling HTTPS with automatic SSL/TLS certificates using Let’s Encrypt.
  • Service Labels: Traefik’s auto-discovery is powerful but requires correct labeling of your services in Docker Compose. Ensure your labels are accurately defined for routing.
  • Network Configuration: All services that Traefik needs to route traffic to must be on the same Docker network. Plan your network architecture accordingly.

Conclusion

Integrating Traefik with Docker Compose offers a streamlined approach to deploying and managing the routing of traffic to your containerized applications. By automating service discovery and simplifying SSL/TLS management, Traefik reduces the complexity traditionally associated with reverse proxies and load balancers. Whether you’re developing locally or deploying at scale, Traefik and Docker Compose together provide a flexible, powerful solution for modern web application infrastructure.

Anastasios Antoniadis
Follow me
Latest posts by Anastasios Antoniadis (see all)
0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x