작성
·
44
·
수정됨
답변 2
0
안녕하세요, 이도원입니다.
Docker 기동 시 -e(--environment) 옵션은 컨테이너가 기동 될 때 내부로 환경 변수 등의 정보를 전달하기 위해서 사용하는 옵션입니다. 실제로 패키징 된 jar 파일을 실행할 때, application.properties(application.yml) 파일에 설정 된 정보를 Command line에서 변경하고자 할 때 아래와 같이 -D 옵션을 이용할 수 있습니다.
java -jar -Dserver.port=8081 app.jar
Java 애플리케이션을 실행하도록 작성 된 Docker 이미지를 이용하여 컨테이너를 실행할 때, Java 애플플케이션으로 환경 변수를 전달하기 위해서는 앞서 말씀드린 -e 옵션을 통해 전달하게 되면, 컨테이너가 작동될 때 해당 옵션이 Java 실행 시 전달되게 됩니다. 예를 들어 아래와 같이 Docker를 실행할 경우
docker run -p 8088:8081 -e "server.port=8081" -e "ORDER-SERVICE-URL=localhost" -e "GATEWAY_IP=127.0.0.1" -e "TOKEN_SECRET=1234" edowon0623/user-service:v1.0
docker inspect <컨테이너ID or 컨테이너명>으로 확인해 보면 아래와 같은 ENV 정보를 확인해 보실 수 있습니다.
"Config": {
"Hostname": "eef04836bceb",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": true,
"AttachStderr": true,
"ExposedPorts": {
"8081/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"TOKEN_SECRET=1234",
"server.port=8081",
"ORDER-SERVICE-URL=localhost",
"GATEWAY_IP=127.0.0.1",
"PATH=/usr/local/openjdk-17/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"JAVA_HOME=/usr/local/openjdk-17",
"LANG=C.UTF-8",
"JAVA_VERSION=17-ea+11"
],
추가 질문사항 있으시면 다시 글 남겨 주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
docker run
명령어에서 -e
옵션은 컨테이너 내에서 사용될 환경변수를 설정하는 데 사용됩니다. 이 경우, -e
옵션으로 지정한 spring.datasource.url
는 스프링 부트 애플리케이션에 대한 데이터베이스 연결 정보를 설정하는 환경변수입니다. 스프링 부트 애플리케이션은 환경변수를 통해 외부 설정을 주입받을 수 있도록 설계되어 있습니다. 따라서, 컨테이너가 실행될 때 -e
옵션을 통해 설정한 환경변수는 스프링 부트 애플리케이션 내부에서 해당하는 프로퍼티 값으로 사용됩니다.
스프링 부트는 application.properties
나 application.yml
과 같은 설정 파일 외에도 환경변수를 통한 설정을 지원합니다. 이를 통해 개발, 배포 환경에 따라 다른 설정값을 유연하게 적용할 수 있게 합니다. 예를 들어, 데이터베이스 URL, 사용자 이름, 비밀번호와 같은 중요한 정보를 외부에서 안전하게 주입할 수 있습니다.
-e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb"
이 부분은 스프링 부트 애플리케이션에게 MariaDB 데이터베이스에 대한 접속 정보를 환경변수를 통해 제공하는 것입니다. 이러한 방식으로 스프링 부트까지 옵션 전달이 이루어지며, 애플리케이션은 이 정보를 바탕으로 데이터베이스와 연결합니다.
님의 궁금증이 해결되기를 바랍니다.