2017-09-25 15 views
1

나는 세 개의 노드로 구성된 무리가 : 그럼도커 떼 확장 행동

$ sudo docker node ls 
ID       HOSTNAME   STATUS    AVAILABILITY  MANAGER STATUS 
i12s3zxsn4vu1c98bv3i5idr8  node03   Ready    Active 
i2ckxvsju4tmommxim3dbfq7l  node02   Ready    Active 
wak4isl46dn7pbo39drrhphju * node01   Ready    Active    Leader 

내가 그 무리에 nginx를 1 복제본을 실행하고 8080 자신의 포트 매핑을 :

$ sudo docker service create --replicas 1 --publish 8080:80 --name nginx nginx 
$ sudo docker service ls 
ID     NAME    MODE    REPLICAS   IMAGE    PORTS 
neahnb9mvi1i  nginx    replicated   1/1     nginx:latest  *:8080->80/tcp 

거기에서, 내가 http://node01:8080

다음에 Nginx에 도달 할 수 있습니다, 나는 6의 nginx 인스턴스를 확장 :

$ sudo docker service scale nginx=6 
$ sudo docker service ls 
ID     NAME    MODE    REPLICAS   IMAGE    PORTS 
neahnb9mvi1i  nginx    replicated   6/6     nginx:latest  *:8080->80/tcp 

거기에서 여전히 http://node01:8080에 nginx에 접속할 수 있습니다.

그러나 도커가 여러 노드를 고유 호스트로 표시하면 모든 nginx 서비스가 동일한 8080 포트에 매핑되므로 이러한 스케일링 작업 중에 어떻게 포트를 관리합니까? 내부적으로 웜에 의해 수행되고 8080에 대한 응답을 반환하는 모든 서비스 인스턴스간에 라운드 로빈로드 균형 조정이 있습니까?

답변

0

웜과 해당 포트에있는 시스템의 IP를 사용하여 포트를 노출하는 모든 서비스 (스택과 함께 배포 된)에 연결할 수 있습니다. 그러면 Docker Swarm이 해당 요청을 복제본 중 하나로 전달합니다. healthstate에 의해 결정되는 복제본 (정상적이지 않은 서비스는 무시 됨)과 기본적으로 라운드 로빈 방식으로 구성된로드 균형 조정 옵션입니다.