2019-02-26 05:50:07 -08:00
# Quick Start
A Simple Use Case Using Docker
{: .subtitle }
![quickstart-diagram ](../assets/img/quickstart-diagram.png )
## Launch Traefik With the Docker Provider
Create a `docker-compose.yml` file where you will define a `reverse-proxy` service that uses the official Traefik image:
```yaml
version: '3'
services:
reverse-proxy:
2020-02-17 11:04:04 +01:00
# The official v2 Traefik docker image
2021-12-20 17:02:06 +01:00
image: traefik:v2.6
2019-07-01 11:30:05 +02:00
# Enables the web UI and tells Traefik to listen to docker
2019-09-12 16:22:03 +02:00
command: --api.insecure=true --providers.docker
2019-02-26 05:50:07 -08:00
ports:
2019-07-01 11:30:05 +02:00
# The HTTP port
- "80:80"
2019-09-12 16:22:03 +02:00
# The Web UI (enabled by --api.insecure=true)
2019-07-01 11:30:05 +02:00
- "8080:8080"
2019-02-26 05:50:07 -08:00
volumes:
2019-07-01 11:30:05 +02:00
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
2019-02-26 05:50:07 -08:00
```
**That's it. Now you can launch Traefik!**
Start your `reverse-proxy` with the following command:
```shell
docker-compose up -d reverse-proxy
```
2021-10-08 11:52:05 +02:00
You can open a browser and go to `http://localhost:8080/api/rawdata` to see Traefik's API rawdata (we'll go back there once we have launched a service in step 2).
2019-02-26 05:50:07 -08:00
## Traefik Detects New Services and Creates the Route for You
Now that we have a Traefik instance up and running, we will deploy new services.
Edit your `docker-compose.yml` file and add the following at the end of your file.
```yaml
# ...
whoami:
2019-07-01 11:30:05 +02:00
# A container that exposes an API to show its IP address
2020-09-16 15:46:04 +02:00
image: traefik/whoami
2019-02-26 05:50:07 -08:00
labels:
2019-03-21 15:34:04 +01:00
- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost` )"
2019-02-26 05:50:07 -08:00
```
The above defines `whoami` : a simple web service that outputs information about the machine it is deployed on (its IP address, host, and so on).
Start the `whoami` service with the following command:
```shell
docker-compose up -d whoami
```
2021-10-08 11:52:05 +02:00
Go back to your browser (`http://localhost:8080/api/rawdata` ) and see that Traefik has automatically detected the new container and updated its own configuration.
2019-02-26 05:50:07 -08:00
When Traefik detects new services, it creates the corresponding routes so you can call them ... _let's see!_ (Here, we're using curl)
```shell
curl -H Host:whoami.docker.localhost http://127.0.0.1
```
_Shows the following output:_
```yaml
Hostname: a656c8ddca6c
IP: 172.27.0.3
#...
```
## More Instances? Traefik Load Balances Them
Run more instances of your `whoami` service with the following command:
```shell
docker-compose up -d --scale whoami=2
```
2021-10-08 11:52:05 +02:00
Go back to your browser (`http://localhost:8080/api/rawdata` ) and see that Traefik has automatically detected the new instance of the container.
2019-02-26 05:50:07 -08:00
2019-05-17 11:32:05 +00:00
Finally, see that Traefik load-balances between the two instances of your service by running the following command twice:
2019-02-26 05:50:07 -08:00
```shell
curl -H Host:whoami.docker.localhost http://127.0.0.1
```
The output will show alternatively one of the followings:
```yaml
Hostname: a656c8ddca6c
IP: 172.27.0.3
#...
```
```yaml
Hostname: s458f154e1f1
IP: 172.27.0.4
# ...
```
!!! question "Where to Go Next?"
Now that you have a basic understanding of how Traefik can automatically create the routes to your services and load balance them, it is time to dive into [the documentation ](/ ) and let Traefik work for you!