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

야크쉐이버님의 프로필 이미지
야크쉐이버

작성한 질문수

DevOps를 위한 Docker 가상화 기술 (Private Harbor Registry)

Multi Container 구성 ②

docker -e 옵션에 대한 질문

작성

·

44

·

수정됨

0

안녕하세요 강의 항상 잘 보고 있습니다.

처음으로 궁금증이 생겨 질문 드립니다.

멀티 컨테이너 구성 2번 강의를 듣고 있습니다.

여기서

docker run -d -p 8088:8088 --network my-network

-e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb" ......

이부분에서 -e을 사용할때 이미지에 딱히 옵션을 스프링으로 전달하는 방식이 안나와 있는것 같은데 어떻게 스프링 부트까지 옵션전달이 되는지 궁금합니다.

 

답변 2

0

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

안녕하세요, 이도원입니다.

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.propertiesapplication.yml과 같은 설정 파일 외에도 환경변수를 통한 설정을 지원합니다. 이를 통해 개발, 배포 환경에 따라 다른 설정값을 유연하게 적용할 수 있게 합니다. 예를 들어, 데이터베이스 URL, 사용자 이름, 비밀번호와 같은 중요한 정보를 외부에서 안전하게 주입할 수 있습니다.

-e "spring.datasource.url=jdbc:mariadb://my-mariadb:3306/mydb"이 부분은 스프링 부트 애플리케이션에게 MariaDB 데이터베이스에 대한 접속 정보를 환경변수를 통해 제공하는 것입니다. 이러한 방식으로 스프링 부트까지 옵션 전달이 이루어지며, 애플리케이션은 이 정보를 바탕으로 데이터베이스와 연결합니다.

님의 궁금증이 해결되기를 바랍니다.

야크쉐이버님의 프로필 이미지
야크쉐이버

작성한 질문수

질문하기