Содержание

Проверка состояния контейнера в Docker со swarm

Добавим проверку контейнера в Dockerfile:

FROM node:14-alpine
RUN apk add curl
WORKDIR /opt/app
ADD index.js .
HEALTHCHECK --interval=5s --timeout=5s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:3000 || exit 1
CMD ["node", "./index.js"]

Собираем образ

vagrant@server3:~/docker-demo-3$ docker build -t localhost:5000/ip .
[+] Building 0.6s (9/9) FINISHED                                                                           docker:default
 => [internal] load build definition from Dockerfile                                                                 0.0s
 => => transferring dockerfile: 253B                                                                                 0.0s
 => [internal] load .dockerignore                                                                                    0.0s
 => => transferring context: 2B                                                                                      0.0s
 => [internal] load metadata for docker.io/library/node:14-alpine                                                    0.5s
 => [1/4] FROM docker.io/library/node:14-alpine@sha256:434215b487a329c9e867202ff89e704d3a75e554822e07f3e0c0f9e60612  0.0s
 => [internal] load build context                                                                                    0.0s
 => => transferring context: 30B                                                                                     0.0s
 => CACHED [2/4] RUN apk add curl                                                                                    0.0s
 => CACHED [3/4] WORKDIR /opt/app                                                                                    0.0s
 => CACHED [4/4] ADD index.js .                                                                                      0.0s
 => exporting to image                                                                                               0.0s
 => => exporting layers                                                                                              0.0s
 => => writing image sha256:bdd5cca7f48f751ec268ee53d60f6f854fa7e29086ec6d9a959ff9eb5d8736ee                         0.0s
 => => naming to localhost:5000/ip       
 
vagrant@server3:~/docker-demo-3$ docker images
REPOSITORY          TAG       IMAGE ID       CREATED       SIZE
localhost:5000/ip   latest    bdd5cca7f48f   2 days ago    124MB

Заливаем образ в реестр

vagrant@server3:~/docker-demo-3$ docker push localhost:5000/ip:latest
The push refers to repository [localhost:5000/ip]
18cafcc3f78c: Layer already exists 
ec5ff2197706: Layer already exists 
31e6ec6c7217: Layer already exists 
31f710dc178f: Layer already exists 
a599bf3e59b8: Layer already exists 
e67e8085abae: Layer already exists 
f1417ff83b31: Layer already exists 
latest: digest: sha256:ccf258012f5ea966b9790347191a3938482f1d06fdf20fe0c5c4bac8fee2121b size: 1783

Создаем сервис swarm

vagrant@server3:~/docker-demo-3$ docker service create --name ip localhost:5000/ip
w6p7q77cz3qk8jyrmz8fzzkdg
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 
 
vagrant@server3:~/docker-demo-3$ docker service ls
ID             NAME       MODE         REPLICAS   IMAGE                      PORTS
w6p7q77cz3qk   ip         replicated   1/1        localhost:5000/ip:latest   
3srd0mspdl9a   registry   replicated   1/1        registry:latest            *:5000->5000/tcp

проверяем работу сервиса

vagrant@server2:~$ docker ps
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                    PORTS     NAMES
95c7d28a432d   localhost:5000/ip:latest   "docker-entrypoint.s…"   47 seconds ago   Up 46 seconds (healthy)             ip.1.rtlwee6rg8unsos6okhpgkl7g

видим что контейнер рабочий - healthy