📚 개발백과

[Docker] 컨테이너 실행 시 외부에서 .yml 주입하기

the0 2024. 9. 26. 15:52
728x90

원하는 바:

도커 이미지를 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