|
|
@@ -0,0 +1,68 @@ |
|
|
|
## Docker Swarm health check example |
|
|
|
|
|
|
|
This example shows how health check works in Docker Swarm. |
|
|
|
|
|
|
|
### What does this container do? |
|
|
|
|
|
|
|
Container runs a nginx server and it also runs a script which writes a ``dead`` |
|
|
|
status to ``/usr/share/nginx/html/status`` file on every odd run which is then |
|
|
|
picked by the health check that expects ``alive`` status from the nginx running |
|
|
|
in the container. |
|
|
|
|
|
|
|
So every odd run the container gets ``unhealthy`` status. |
|
|
|
Then you can observe that running this container in Docker Engine alone will |
|
|
|
not restart it. Hence we will run it as a service in the Docker Swarm which |
|
|
|
will ensure the container gets restarted until it gets ``healthy`` status. |
|
|
|
|
|
|
|
### Building image |
|
|
|
|
|
|
|
``` |
|
|
|
docker build -t healthcheck-test . |
|
|
|
``` |
|
|
|
|
|
|
|
### Setting up env |
|
|
|
|
|
|
|
Make sure you have recent Docker Engine installed. |
|
|
|
|
|
|
|
``` |
|
|
|
docker swarm init |
|
|
|
``` |
|
|
|
|
|
|
|
### Running the service |
|
|
|
|
|
|
|
``` |
|
|
|
docker service create \ |
|
|
|
--name test1 \ |
|
|
|
--mount type=bind,src=/tmp,dst=/usr/share/nginx/html \ |
|
|
|
--detach healtcheck-test |
|
|
|
``` |
|
|
|
|
|
|
|
### Watching the healtcheck |
|
|
|
|
|
|
|
``` |
|
|
|
docker ps |grep test1 |
|
|
|
docker service ls |
|
|
|
``` |
|
|
|
|
|
|
|
### Cleaning up |
|
|
|
|
|
|
|
``` |
|
|
|
docker service rm test1 |
|
|
|
docker swarm leave --force |
|
|
|
rm -rf -- /tmp/html |
|
|
|
``` |
|
|
|
|
|
|
|
### Extra |
|
|
|
|
|
|
|
If you want to restart the container manually, you need to downscale it to 0 |
|
|
|
first and then upscale it back again. |
|
|
|
|
|
|
|
``` |
|
|
|
docker service scale test1=0 |
|
|
|
docker service scale test1=1 |
|
|
|
``` |
|
|
|
|
|
|
|
### References |
|
|
|
|
|
|
|
- https://docs.docker.com/compose/compose-file/ |
|
|
|
- https://docs.docker.com/engine/reference/builder/ |