Както си спомняте, работих с 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 шлюз е ужасно бавен и не съм сигурен къде се крие проблемът.