2019-02-26 13:50:07 +00: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 10:04:04 +00:00
# The official v2 Traefik docker image
2021-06-28 16:00:12 +00:00
image: traefik:v2.5
2019-07-01 09:30:05 +00:00
# Enables the web UI and tells Traefik to listen to docker
2019-09-12 14:22:03 +00:00
command: --api.insecure=true --providers.docker
2019-02-26 13:50:07 +00:00
ports:
2019-07-01 09:30:05 +00:00
# The HTTP port
- "80:80"
2019-09-12 14:22:03 +00:00
# The Web UI (enabled by --api.insecure=true)
2019-07-01 09:30:05 +00:00
- "8080:8080"
2019-02-26 13:50:07 +00:00
volumes:
2019-07-01 09:30:05 +00:00
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
2019-02-26 13:50:07 +00: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 09:52:05 +00: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 13:50:07 +00: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 09:30:05 +00:00
# A container that exposes an API to show its IP address
2020-09-16 13:46:04 +00:00
image: traefik/whoami
2019-02-26 13:50:07 +00:00
labels:
2019-03-21 14:34:04 +00:00
- "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
2019-02-26 13:50:07 +00: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 09:52:05 +00: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 13:50:07 +00: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 09:52:05 +00: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 13:50:07 +00: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 13:50:07 +00: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!