Както си спомняте, работих с manager1, когато създавах и внедрявах моите микроуслуги, освен когато ставаше въпрос за mongoDB (тази услуга беше внедрена на всички виртуални хостове: manager1, worker1 и worker2). В резултат на това получихме следното:

Това не е точно това, което имах предвид, когато започнах да разработвам своите микро-услуги. Търсех нещо подобно на това:

И така, какво се случва?

Някога наистина изпълнявахме нашия start-service.sh в контейнера manager1. За да внедрим ефективно всички наши услуги, ще трябва да пренапишем нашата услуга за стартиране и спиране за всяка микроуслуга, така че услугата да бъде внедрена във всички контейнери. И това изобщо не е много трудно:

#!/usr/bin/env bash 
for server in manager1 worker1 worker2
do    
  eval `docker-machine env $server`     
  echo $(env | grep DOCKER)     
  docker rm -f api-gateway        
  docker rmi api-gateway
  docker image prune     
  docker volume prune     
  docker build -t api-gateway .     
  docker run --name api-gateway -v   /Users/Cramirez/.docker/machine/machines/$server:/certs --net='host' --env-file env -d api-gateway 
done

Както можете да видите, комбинирах както start-service.sh, така и stop-service в един скрипт и използвам bash скриптове, за да разположа микроуслуга на моите виртуални хостове. Няколко неща за открояване:

eval `docker-machine env $server`

Горният ред променя моята среда, така че останалите bash команди да се извършват в рамките на дадения виртуален хост ($server).

docker rm -f api-gateway        
docker rmi api-gateway
docker image prune     
docker volume prune

Аз просто почиствам, известен още като стоп-сервиз.

docker build -t api-gateway .

Използвайте Dockerfile на микроуслугата, за да създадете изображението.

docker run --name {name of service} ...

И накрая стартирайте услугата.

#!/usr/bin/env bash
for server in manager1 worker1 worker2
do
eval `docker-machine env $server`
echo $(env | grep DOCKER)
ip=$(docker-machine ip $server)
echo 'server ip >>>> '$ip
docker rm -f doctors-service
docker rmi doctors-service
docker image prune
ocker volume prune
docker build -t doctors-service .
docker run -l=msRoute='/provider' --add-host manager1:192.168.99.100 --name doctors-service -p 3000:3000 -d doctors-service
done

Горното е моето пренаписване на start-script.sh за doctors-service. След като го стартирате, трябва да проверите както ps, така и регистрационните файлове, за да сте сигурни, че услугата работи. Ще трябва да направя същото за всички други услуги.

И сме готови…

Какво следва?

Ще се справя с проблема с тесните места с моята настройка, тъй като моят API шлюз е ужасно бавен и не съм сигурен къде се крие проблемът.

Какво сме направили досега