Docker, Kubernetes 및 Jenkins를 사용하여 프로젝트에 CI / CD 파이프 라인을 구현하려고합니다. 내 응용 프로그램은 데이터베이스 응용 프로그램의 변수가 모든 테넌트마다 다릅니다.
응용 전략
도커 이미지를 만들 때 Dockerfile을 사용하고 있습니다. 그리고 Dockerfile을 SVN 코드 저장소에 보관합니다. 모든 테넌트마다 코드 리포지토리가 동일합니다. 이미지를 빌드 할 때 다른 테넌트에 대해 다른 이미지를 빌드해야합니다.
Dockerfile 구현
내 docker 파일에서 다음과 같은 진입 점을 추가하고 있습니다.
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=tenant1config" , "TestProject.war"]
다른 테넌트에 대한 Docker 이미지를 빌드 해야하는 경우 추가해야합니다.
-Dspring.profiles.active=tenant2config
따라서 Dockerfile의 진입 점은 동적입니다.
내 혼란
- Dockerfile 내에서 진입 점 명령을 관리하기 위해 동적으로 가능합니까?
- 또는 다른 테넌트에 다른 Dockerfile을 추가해야합니까? 별도의 테넌트에 대해 docker build 명령을 별도로 실행해야합니까?
이 문제에 대한 좋은 표준 구현 방법을 어떻게 찾을 수 있습니까?
ENTRYPOINT즉 , 환경 변수를 사용... -Dspring.profiles.active=${TENANT}하여 배포 중에 올바른 환경을 설정할 수 있습니다 .