-
[Docker] 컨테이너 실행 시 외부에서 .yml 주입하기📚 개발백과 2024. 9. 26. 15:52728x90
원하는 바:
도커 이미지를 docker run으로 실행할 때 application.yml을 주입하고 싶음.
> 이유: 업데이트된 yml을 주입하고 싶기 때문.
yml 설정이 바뀔때마다 이미지를 새로 생성해서 가져가는일이 번거롭다;
방법:
기존) 컨테이너를 실행하는 명령어
참고로 `--network host`는 개인적으로 한 설정이다.
기존과 수정 명령어간 차이만 봐주시면 된다.
docker run -d \ --name my-backend \ -p 7778:7778 \ --network host \ (개인 설정이므로 무시해도됨.) my-backend
.. 에서 두 가지 옵션을 추가해준다.
-v 와 -e
docker run -d \ --name my-backend \ -p 7778:7778 \ --network host \ (개인 설정이므로 무시해도 됨.) -v "외부_주입할_properties_위치/application.yml:/컨테이너_내부_properties_위치/application.yml" \ -e SPRING_CONFIG_LOCATION=/컨테이너_내부_properties_위치/application.yml \ my-backend
첫번째 옵션
-v "외부_주입할_properties_위치/application.yml:/컨테이너_내부_properties_위치/application.yml"
-v 옵션으로 외부에서 주입할 application.yml 와 컨테이너 내부의 application.yml 이 매핑되도록 볼륨을 공유해준다.
(참고)
🤔 컨테이너 내부의 application.yml의 위치는 어떻게 찾나요?
$ docker exec -it <containerID> /bin/sh (혹은 /bin/bash)
를 통해 접속해서 확인할 수 있다.
🩸볼륨을 공유해준다고 실제 적용까지 되는 건 아니다! (삽질한 경험담)
-v 옵션만 주고 명령어를 실행했을 때,
컨테이너 내부 application.yml이 기존 코드가 아닌 외부 yml로 덮여쓰여지긴 했으나 실제 적용은 안됐음
그래서 아래 -e 옵션까지 주어야 한다!
두번째 옵션
-e SPRING_CONFIG_LOCATION=/컨테이너_내부_properties_위치/application.yml
-e 옵션으로 구성 파일의 위치를 -v 옵션으로 마운트한 파일의 경로로 환경변수에 지정한다.
스프링부트가 그 파일을 구성파일로 사용하도록 설정한다.
끝!
728x90'📚 개발백과' 카테고리의 다른 글
[FastAPI, PostgreSQL] postgresql://와 postgresql+asyncpg:// 의 차이 (1) 2024.10.18 오프라인 상태에서 cURL 사용하기 (0) 2024.10.01 [Spring] 유효성 검사에서 @Valid 와 setField 중 무엇이 먼저 실행될까 (1) 2024.08.08 [Naver Cloud] SSL 인증서 中 Chrome 호환성 정리 (2024.08 기준) (0) 2024.08.04 [TWA] 웹으로 구현한 FCM을 앱에서 띄우기 (0) 2024.08.04