인스턴스가 동시에 여러 컨테이너를 실행하기엔 성능이 부족하여 기존 방식 (new container 3개 띄우고 다 띄워 지면 old container를 내리는 방식)으로 배포 자동화를 하기 힘들었다.(계속 인스턴스가 뻗음)
그래서 생각했던 방식은 new container를 띄우기 전에 old container를 1개로 줄이고 new cotainer를 다 띄운 후 old container를 내리는 방식이다.
의도대로 스크립트에 스케일을 줄이는 명령을 추가했더니..
실행중인 color의 컨테이너를 2개 죽이고 하나를 놔두는게 아닌 restart시켜버린다.
아래 처럼 직접 인스턴스에 대고 스크립트를 실행하는 경우엔 정상적으로 수행된다.
이유를 찾다보니.. 컨테이너 이미지가 스케일을 줄이는 시점에 최신화되어 그럴 수 있다는 것 같아서
새로운 이미지를 당겨오기전에 먼저 스케일 값을 줄여보는 방식으로 변경해보니
동일하게 Recreate한다.
다시 찾아보다 보니 컨테이너를 띄우는 시점에 --no-recreate 옵션을 주면 컨테이너가 존재하는 경우 다시 만들지 않게 할 수 있고, dockr compose scale 명령 자체가 deprecated되었기에 up 명령 시점에 —scale을 사용해라 적혀 있어서 (도커 공식문서에)
sudo docker compose up -d $OLD_CONTAINER --scale $OLD_CONTAINER=1 --no-recreate
기존 scale을 줄이는 부분을 이렇게 바꾸고 다시 배포해봤다.
원하던대로 줄어든 2개의 컨테이너만 삭제되고 하나의 컨테이너는 실행을 유지하는 것을 확인할 수 있었다.
이 방법도 안되었으면 workflow 최상단에 컨테이너 scale을 줄이는 스크립트를 따로 생성해서 먼저 줄여놓고 배포를 이어나가는 방식을 시도하려 했는데..
해당 방식의 경우 컨테이너가 하나로 유지되는 시간 자체가 기존 방식에 비해 길어지기에 원하는 방향이 아니였어서 내키지는 않았었다..
그래도 원하던 방식대로 배포를 할 수 있어 다행이다 !
참고
https://github.com/docker/compose/issues/9897
https://docker-docs.uclv.cu/compose/reference/scale/
https://docs.docker.com/config/containers/start-containers-automatically/
'Gyunpang' 카테고리의 다른 글
8. Gateway 로깅 및 인증 기능 구현하기(2) (0) | 2024.07.23 |
---|---|
7. Gateway 로깅 및 인증 기능 구현하기(1) (1) | 2024.07.23 |
6. 여러대의 인스턴스에 무중단 배포하기 (0) | 2024.04.06 |
5. Nginx + React 무중단 배포하기 (0) | 2024.03.26 |
4. Docker + Github Action + nginx로 CI/CD 파이프라인 구축하기 (1) | 2024.03.24 |