Browse Source

first commit

master
Andrey Arapov 5 months ago
commit
34390002c6
Signed by: Andrey Arapov <andrey.arapov@nixaid.com> GPG Key ID: 9076D5E6B31AE99C
3 changed files with 92 additions and 0 deletions
  1. +12
    -0
      Dockerfile
  2. +68
    -0
      README.md
  3. +12
    -0
      entrypoint.sh

+ 12
- 0
Dockerfile View File

@@ -0,0 +1,12 @@
FROM nginx:alpine

RUN apk --update add curl

HEALTHCHECK \
--interval=2s \
--timeout=2s \
--retries=2 \
CMD curl -s http://localhost/status | grep -q '^alive$'

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["sh", "/entrypoint.sh"]

+ 68
- 0
README.md View File

@@ -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/

+ 12
- 0
entrypoint.sh View File

@@ -0,0 +1,12 @@
#!/bin/sh

# Mount /usr/share/nginx/html must be persistent for this test to work properly
# in the Docker Swarm since it does not just restart the container but rather
# removes it and then starts it.
SFILE=/usr/share/nginx/html/status

# I am unhealthy until I get restarted and then I will become healthy again.
# That way I will be healthy every even run and unhealthy every odd run.
grep dead $SFILE && ( echo alive | tee $SFILE ) || ( echo dead | tee $SFILE )

exec nginx -g "daemon off;"

Loading…
Cancel
Save