Load balanced web server that can be scaled by Force12.
This project was hugely influenced by and copies chunks from bellycard/docker-loadbalancer.
You'll need Docker Toolbox installed and on Mac or Windows you'll need to start a Docker VM:
docker-machine create -d virtualbox force12
docker-machine start force12
docker-machine env force12
eval "$(docker-machine env force12)"
(You can skip this if you're running directly on a Linux machine / VM).
The docker-compose.yml file runs containers for nginx, consul and registrator.
The -advertise address for consul needs to be the same as the IP address for the machine. Here's how to find it:
- Use
ifconfig
and look for the eth0 address if you're running directly on a Linux host - Use
docker-machine ip force12
if you're using Docker Machine to run a VM.
Edit that address in the docker-compose.yml file before you run it.
docker-compose up -d
If you find you don't already have docker-compose installed, the instructions are here.
Sign up / log in to Microscaling-in-a-Box and configure the high-priority task to run your web server by setting the Docker image to force12io/simplewebserver:latest
Run the command as directed on the microscaling Run page (which will show you your own user ID).
You should be able to see a very simple web server at the IP address you noted earlier. The nginx load balancer is using its default round-robin, which means that if you've got more than one web server container running, they will take it in turns to serve the web page, so you can see the container ID for each web server. You can compare this to the number of web server containers you can see running on the Microscaling-in-a-Box web site.
If microscaling is set up to allow 0 high-priority tasks, you might have no web servers running, in which case you'll see an nginx 502 error.
The web servers are registered in Consul with the service name 'app'. You can see list them out like this:
- On Linux where you're running directly on the host:
curl localhost:8500/v1/catalog/service/app | python -m json.tool
- If you're running with a virtual machine
curl http://$(docker-machine ip force12):8500/v1/catalog/service/app | python -m json.tool
As the number of web servers changes through microscaling, you should see this reflected in the entries in Consul.
If you want to see all the services registered in Consul (note plural 'services'!):
- On Linux where you're running directly on the host:
curl localhost:8500/v1/catalog/services | python -m json.tool
- If you're running with a virtual machine
curl http://$(docker-machine ip force12):8500/v1/catalog/services | python -m json.tool
Build the hello-world container and tag it 'f12web'.
docker build -t f12web hello-world
Change the Microscaling-in-a-box configuration to use the image tagged f12web
as the high-priority task.
You need to tell the Force12 client not to try to pull this image from the repository by adding the F12_PULL_IMAGES=false flag when you run it.
docker run -e "F12_USER_ID=xxxxx" -e "F12_PULL_IMAGES=false" -v "/var/run/docker.sock:/var/run/docker.sock:rw" -it force12io/force12:latest