What is Caddy?
From the website:
Caddy is an alternative web server that is easy to configure and use.
A web server that serves you Other web servers were designed for the Web, but Caddy was designed for humans, with today's Web in mind.
This wonderful piece of software is a perfect fit for my 6-Node Cluster of Raspberries!
Here is an example:
Back to my idea
What is a Docker service?
Frequently a service will be the image for a microservice within the context of some larger application.
To deploy an application image when Docker Engine is in swarm mode, you create a service.
Ok, docker needs to run in swarm mode... see the Quickstart Docker Swarm
Lets get started
We need a docker image
Create a docker service
$ docker service create --name caddy-service --publish 2015:2015 --replicas 6 pixelchrome/caddy-arm m4xs9p90h2jj12xs07zur8vtp
$ docker service ls ID NAME MODE REPLICAS IMAGE m4xs9p90h2jj caddy-service replicated 1/6 pixelchrome/caddy-arm:latest
$ docker service ps caddy-service ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS ej0njtn4dkl0 caddy-service.1 pixelchrome/caddy-arm:latest pi3 Running Running 2 minutes ago n33ikkyy9ygr caddy-service.2 pixelchrome/caddy-arm:latest pi6 Running Running about a minute ago h0rwye2zbk2j caddy-service.3 pixelchrome/caddy-arm:latest pi5 Running Running about a minute ago k4wal0jegcag caddy-service.4 pixelchrome/caddy-arm:latest pi2 Running Running 2 minutes ago ie91uryxhxwq caddy-service.5 pixelchrome/caddy-arm:latest pi1 Running Running 2 minutes ago s8bas4humy84 caddy-service.6 pixelchrome/caddy-arm:latest pi4 Running Running about a minute ago
On each Raspberry Pi is one instance of caddy running!
Remove the service
$ docker service rm caddy-service caddy-service
$ docker service ls ID NAME MODE REPLICAS IMAGE
If you need more specific settings you can change the
Caddyfile or you want to host more than just the default
index.html file, please find some examples below. These files or directory have to be available on each node of the swarm!
Mount a specific "Document Root" (e.g. /var/www of the Raspian)
$ docker service create --name caddy-service --publish 2015:2015 --replicas 6 --mount type=bind,source=/var/www,target=/srv pixelchrome/caddy-arm
$ docker service create --name caddy-service --publish 2015:2015 --replicas 6 --mount type=bind,source=<PATH>/Caddyfile,target=/etc/Caddyfile pixelchrome/caddy-arm
A combination of both examples from above
$ docker service create --name caddy-service --publish 2015:2015 --replicas 6 --mount type=bind,source=/home/pi/example/Caddyfile,target=/etc/Caddyfile --mount type=bind,source=/var/www,target=/srv pixelchrome/caddy-arm
Caddy runs now independently on each node of the swarm. It is time to put a load balancer in front of it. Stay tuned...