4.docker swarm - запуск сервисов(traefik)

Thank you for reading this post, don't forget to subscribe!

Име­ет­ся несколь­ко хостов:
192.168.1.180 swarm_master1_180
192.168.1.181 swarm_master2_181
192.168.1.182 swarm_master3_182
192.168.1.183 swarm_node1_183
192.168.1.184 swarm_node2_184
192.168.1.185 swarm_node3_185

Рас­смот­рим уста­нов­ку про­сто­го кон­тей­не­ра nginx кото­рый будет висеть на 80 порту.(кластер swarm уже собран, traefik и consul работают)
если мы хотим что­бы дан­ный сер­вис рабо­тал в рам­ках отдель­ной docker сети, нам нуж­но будет попра­вить и зано­во заде­п­ло­ить traefik.
созда­ём нашу новую сеть:
docker network create --driver=overlay nginx

пра­вим traefik.yml

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

мы доба­ви­ли для сер­ви­са traefik допол­ни­тель­ную сеть nginx.

[spoiler]

Так­же напом­ним, что логин пароль для досту­па к пане­ли traefik мы зада­ли в переменной:
traefik.frontend.auth.basic.users
в каче­стве логи­на паро­ля admin admin (они были созда­ны сле­ду­ю­щей командой)
yum install httpd-tools  (если не уста­нов­ле­на утилита)
echo $(htpasswd -nb admin admin) | sed -e s/\\$/\\$\\$/g
[/spoiler]

заде­п­ло­им дан­ный сервис:
[root@swarm_master1_180 ~]# docker stack deploy -c traefik.yml traefik-consul
теперь мы смо­жем исполь­зо­вать нашу сеть.
созда­дим файл nginx.yml со сле­ду­ю­щим содержимым:

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

и деп­ло­им его:
[root@swarm_master1_180 ~]# docker stack deploy -c nginx.yml nginx
Далее можем про­ве­рить панель traefik:
https://traefik.test.ru
ниже предо­став­лен скрин­шот, что на нём пока­за­но, хост­нейм на фрон­тен­де и бэкенд с нашей новой под­се­тью nginx 10.0.39.0/24

[spoiler]

[/spoiler]

[root@swarm_master1_180 ~]# curl -I nginx.test.ru
HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Length: 612
Content-Type: text/html
Date: Fri, 30 Aug 2019 06:28:21 GMT
Etag: "5acb8e45-264"
Last-Modified: Mon, 09 Apr 2018 16:01:09 GMT
Server: nginx/1.13.12

как видим всё ок.

=========

 

Доба­вим ещё один сер­вис и под­пра­вим кон­фиг теку­ще­го, что­бы volume с нашим кон­тен­том подтягивался:
1 сер­вис nginx:

[root@swarm_master1_180 ~]# mkdir -p /var/www/nginx
[root@swarm_master1_180 ~]# cat /var/www/nginx/index.html
test

опи­са­ние сер­ви­са nginx.yml

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

вто­рой сер­вис nginx2:

[root@swarm_master1_180 ~]# mkdir -p /var/www/nginx2
[root@swarm_master1_180 ~]# cat /var/www/nginx2/index.html
test2

опи­са­ние сер­ви­са nginx2.yml

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

деп­ло­им их:
[root@swarm_master1_180 ~]# docker stack deploy -c nginx.yml nginx
[root@swarm_master1_180 ~]# docker stack deploy -c nginx2.yml nginx2

про­ве­ря­ем:

[spoiler]

в пане­ли traefik:
https://traefik.test.ru

[/spoiler]

=========================================================

Рассмотрим установку nexus.

 

Дан­ный сер­вис будет исполь­зо­вать­ся для хра­не­ния ска­чи­ва­е­мых образов(также его мож­но исполь­зо­вать как прок­си сер­вер и репозиторий)

Nexus будет рабо­тать толь­ко на одном сервере(так как это не кри­тич­ный сервис)
на сер­ве­ре swarm_master1_180 созда­ём дирек­то­рию для базы данных:

mkdir /var/nexus-data

chmod 777 /var/nexus-data/

отме­тим, что в дан­ной дирек­то­рии долж­но быть не мень­ше 5 гб сво­бод­но­го дис­ко­во­го пространства.
будем исполь­зо­вать стан­дарт­ную сеть: traefik-public

рас­смот­рим кон­фиг nexus.yml

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

с помо­щью:
[node.hostname == swarm_master1_180]
при­вя­зы­ва­ем сер­вис толь­ко к 1 ноде.
кон­тей­нер nexus исполь­зу­ет 3 пор­та 8081  8082 8083, на пор­ту 8081 висит web панель.
каж­дый порт мы поса­ди­ли на свой хост(домен)
деп­ло­им дан­ный сервис:
[root@swarm_master1_180 ~]# docker stack deploy -c nexus.yml nexus 

про­ве­ря­ем:

[spoiler]

в пане­ли traefik
https://traefik.test.ru

[/spoiler]

гото­во, сер­вис nexus поднят.

далее захо­дим на
nexus.test.ru созда­ём поль­зо­ва­те­ля, репо­зи­то­рий и т.д.
Если был создан докер прок­си, то на целе­вых тач­ках  добавляем:
cat /etc/docker/daemon.json
{
"insecure-registries": ["nexus.test.ru","nexus82.test.ru","nexus83.test.ru"],
"experimental": true
}и конектимся:

docker login nexus82.test.ru
в каче­стве логи­на и паро­ля ука­зы­ва­ем аутен­ти­фи­ка­ци­он­ные дан­ные задан­ные при вхо­де в nexus.
всё, на этом гото­во мож­но выка­чи­вать обра­за исполь­зуя сле­ду­ю­щую команду:
docker pull nexus82.test.ru/nginx