docker swarm이 전체 스택을 다시 시작하지 않고 스택의 일부인 하나의 서비스를 다시 시작하도록하는 방법이 있는지 아는 사람이 있습니까?
답변:
이렇게 docker stack deploy
나를 다시하는 업데이트 서비스로 이동하는 방법입니다. 로 프랑소와 '대답 , 또한 내 자신의 경험에서, 일을 너무 필요가 업데이트 할 것을에만 서비스를 업데이트합니다.
그러나 때로는 테스트 할 때 단일 서비스 만 다시 시작하는 것이 더 쉬워 보입니다. 제 경우에는 볼륨을 지우고 서비스를 업데이트하여 새 것처럼 시작해야했습니다. 설명 할 방법에 단점이 있는지 확실하지 않습니다. 나는 그것을 내 개발 스택에서 테스트했고 그것은 나를 위해 잘 작동했습니다.
해체하려는 서비스 ID를 가져온 다음이를 사용 docker service update --force <id>
하여 효과적으로 다시 배포하는 서비스 업데이트를 강제 실행합니다.
$ docker stack services <stack_name>
ID NAME ...
3xrdy2c7pfm3 stack-name_api ...
$ docker service update --force 3xrdy2c7pfm3
이 --force
플래그는 서비스를 강제로 업데이트하여 다시 시작합니다.
0으로 확장 및 백업 :
docker service scale myservice=0
docker service scale myservice=10
docker stack
문서를 보면 :
자세한 설명
떼의 compose 또는 dab 파일에서 스택 생성 및 업데이트
에서 이 블로그 기사 : docker stack
와 유사한 방식으로 작동합니다 docker compose
. 그것은이다 나무 등 . 스택이 이미 배포 된 경우 docker stack deploy
업데이트 된 다이제스트 또는 태그가있는 서비스 만 다시 시작합니다.
경험상 하나의 서비스가 변경된 상태에서 동일한 스택을 다시 배포 하면 업데이트 된 서비스 만 다시 시작 됩니다.
하지만 ... 고려되는 변경 사항에 몇 가지 제한이있는 것 같습니다 (일부 이미지 태그가있는 버그 보고 ). 시도해보고 예상대로 작동하는지 확인하십시오.
service update
변경 사항으로 업데이트 된 경우에만 대상 서비스를 확인하려는 경우 에도 사용할 수 있습니다 .
service update
문서를 살펴보면 env
내장 된 방법이 없다면 변수를 추가 / 제거 하여 가짜로 만들 수 있습니다 .
docker stack deploy
했습니다. 서비스를 시작하지 않습니다 (openldap). 로그 파일을 찾을 수 없습니다. docker-compose run <service>
문제없이 컨테이너를 시작합니다. 마침내 일 docker service update --force <servce>
했습니다.
롤링 업데이트 문서 의 예에 따라 :
$ docker 서비스 업데이트 --image redis : 3.0.7 redis
그러나 이미지가 이미 로컬 컴퓨터에있는 경우에만 작동합니다. 그렇지 않은 경우 --with-registry-auth를 사용하여 레지스트리 인증 세부 정보를 swarm 에이전트에 보내야합니다. Docker 서비스 업데이트 문서 에서 세부 사항을 참조하십시오 .
$ docker 서비스 업데이트 --with-registry-auth --image redis : 3.0.7 redis