인프런 커뮤니티 질문&답변

손창현님의 프로필 이미지

작성한 질문수

초보를 위한 도커 안내서

docker file 외부에서 환경 변수 값 변경이 가능한가요 ?

해결된 질문

작성

·

3K

2

안녕하세요 :)

 

강의를 통해 학습하고 

실제 프로젝트를 도커 이미지로 만들고, 허브에 올린 뒤

ec2 서버에서  도커 이미지를 불러와서 컨테이너를 띄워보고..

그렇게 학습 하고 있습니다!

 

한가지 궁금한게 생겼는데요,

 

현재 개인적으로 진행하고 있는 스프링 프로젝트의 경우

application.properties에  db 정보를 입력받고 있습니다.

예를 들면   db -> my_db (마찬가지로 도커로 띄웠고, 이름을 my_db라고 했습니다)


spring.datasource.hikari.username=계정명
spring.datasource.hikari.password=비밀번호

 

이런식으로 이미 값을 주입한 뒤,  docker build 로  이미지를 만들고,

ec2 서버에서 해당 이미지를 받아와서 docker run 할 때

저 username , password, db이름 같은 정보를 이미 만들어진 image 외부에서 변경할 수 있나요 ?

 

docker run 시   -e 를 통해서  application-prod.properties 이런식으로 

환경 파일을 다른걸 적용하게끔은 할 수 있는데

해당 변수의 값들이 이미 정해진 상황에서

-e 옵션을 통해   값 변경도 가능한지 궁금합니다.

 

 

감사합니다 :)

답변 2

0

손창현님의 프로필 이미지
손창현
질문자

답변 감사합니다 :) !!

0

subicura님의 프로필 이미지
subicura
지식공유자

안녕하세요!

도커를 공부하고 실무에 적용할 때 생기는 중요한 이슈에 대해서 문의주셨네요.

도커 컨테이너를 실행할 때 변경할 수 있는 방법은 -e를 이용하여 환경변수를 지정하는 것입니다.

아마도.. 다음과 같은 방법을 사용할 수 있습니다.

1. 기존

서버 실행

2. 방법 1

환경변수를 읽어서 application.properties 에 해당 값을 수정한 다음 서버 실행

3. 방법 2

application-prod.properties 파일을 application.properties 파일로 변경한 다음 서버 실행

Dockerfile에서 CMD 항목에 서버를 바로 실행하지 말고 쉘 스크립트를 하나 만들어서 이런저런 작업을 하고 서버를 실행하면 됩니다.

이론적으로는 가능하고 실제로도 잘 동작하지만, 귀찮기 때문에 spring boot에서 자체적으로 더 편한 방법을 제공합니다.

1. spring boot 방식

환경변수중에 SPRING_PROFILES_ACTIVE=prod 를 지정하면 자동으로 application-prod.properties 파일을 바라봅니다.

개발할 땐 application.properties 설정을 바라보고 docker로 운영 서버에 배포할 땐 -e SPRING_PROFILES_ACTIVE=prod 만 추가하면 됩니다.

2. properties에 env 추가

spring.datasource.hikari.username=${DB_USER:devuser}

spring.datasource.hikari.password=${DB_PASS:devpass}

기존에 사용한 properties 내용을 다음과 같이 바꾸고 DB_USER, DB_PASS env를 사용할 수도 있습니다.

여러 방법중에 편한 방법을 시도해보시면 될 것 같습니다.

감사합니다!