docker-compose.yml
필요한 모든 컨테이너를 나열하는 파일 과 함께 개발 환경에서 docker-compose를 사용하고 있습니다 .
또한 중앙 집중식 git repo, Jenkins 서버 및 스테이징과 프로덕션을 모두 유지할 또 다른 서버가 있습니다.
따라서 문제는 배포 프로세스를 보다 효과적으로 구성하는 방법입니다.
이제 git push
git 서버 측에서 Jenkins 빌드 작업이 트리거됩니다. 지점 이름(스테이징 또는 프로덕션)에 따라 다양한 작업이 트리거됩니다.
빌드 작업은 전체 환경을 불러오고 테스트를 실행하기 위해 docker-compose를 사용합니다. 그러면 새 컨테이너를 스테이징/프로덕션 환경에 푸시하려면 어떻게 해야 합니까?
한 가지 방법은 이를 프라이빗 또는 퍼블릭 Docker 레지스트리로 푸시하는 것입니다. 하지만 프로덕션에서 컨테이너를 업데이트하는 가장 좋은 방법은 무엇입니까? Jenkins 서버는 ssh를 통해 raw kill
, rm
및 명령 pull
을 실행해야 합니까 run
? 주변에 예가 보이지 않습니다.
답변1
Kubernetes, Docker Swarm 또는 Rancher는 아마도 롤링 업데이트를 구현하는 가장 좋은 방법일 것입니다.
기본적으로 롤링 업데이트는 컨테이너 컬렉션(서비스라고 함)을 가져와 하나씩 업데이트합니다. 따라서 앱을 실행하는 세 개의 컨테이너가 있다고 가정해 보겠습니다. 롤링 업데이트는 첫 번째 컨테이너를 중단하고 업데이트하는 방식으로 서비스가 완전히 업데이트될 때까지 계속됩니다. 즉, 이러한 제품의 로드 밸런서는 지능적이며 컨테이너 업데이트로 리디렉션되지 않으므로 앱의 가동 중지 시간이 전혀 발생하지 않습니다.
이 링크는 서비스를 실행하고 업데이트하는 Swarm의 기본 구현을 제공합니다.
가장 쉬운 설정 및 구현을 위해 내 경험에 따르면 Rancher는 이러한 모든 개념을 익히는 데 좋은 시작점입니다. 기본적으로 Kubernetes와 같은 다양한 Docker 기술을 기반으로 하는 인터페이스입니다.