p. 347
docker service create --name web --constraint node.role==worker --replicas 3 -p 80:80 nginx
- 실행 node 는 role 이 worker 인 node 이다 ( constraint )
- replicas 는 컨테이너를 생성할 개수이다
- 각 node 의 80 번 Port 와 컨테이너의 80 번 Port 를 연결한다
- 이는 manager 에서 컨테이너를 생성해서 전달하는 것이 아닌, worker 에게 컨테이너를 생성하라고 명령을 전달하여 worker 에서 컨테이너를 생성하는 것이다
- 라운드 로빈 방식으로 worker 에게 명령을 전달한다
docker service ls
docker service ls 를 통해 Service list 를 확인 가능하다
- replicated 는 요청한 만큼 복제되어 배포되었다는 것을 의미한다
- global 같은 경우 각 node 에 일괄적으로 생성하는 것이다
요청한 컨테이너 개수도 확인 가능하다
docker service ps 'service 이름'
위와 같이 web Service 에서 동작중인 Container list 를 확인 가능하다. 각 Container 가 어떤 Node 에서 동작중인지도 확인 가능하다
- Container 의 이름은 Service 이름 뒤에 번호가 붙여서 지정된다
Shutdown 된 Container 는 Node 에 Container 를 배포하는 과정에서 Image 가 없어서 Image 를 Pull 받는 과정에서 Container 생성을 계속 시도하다가 reject ( 실패 ) 당한 Container 이다. 뒤에 STATE 를 확인하면, Rejected 된 것을 확인할 수 있다
컨테이너가 생성되지 않는 이유
- 이미지가 다운되지 않은 상태에서 생성하려고 할 때
- 이미지 다운을 위한 인증 정보가 없을 때
- 자원 사용의 불균형이 발생할 수 있다. 즉, 한 대의 노드에서 여러 컨테이너가 동작하고, 다른 노드들에서는 컨테이너 생성이 되지 않는 문제가 발생할 수 있다
- manager 에서 로그인을 하고, config.json 정보를 일일이 각 노드의 config.json 에 붙여넣기 한다
- manager 에서 로그인을 하고, config.json 정보를 docker service create 시 넘겨준다
- 이때, --with-registry-auth 옵션을 사용하면 된다
docker service scale web=1
docker service scale web=4
docker service rm web
- Service 를 삭제하면, Container 들도 같이 삭제된다