본문 바로가기

[Docker] Dockerfile에서 환경변수 사용하기

@suhyeon chae2023. 12. 24. 14:57

💡 해당 글은 node.js 프로젝트환경 변수를 사용하여 이미지로 build 하는 예제입니다. (예제는 node.js로 했지만 환경 변수를 사용하는 방법이 나오니 끝까지 봐주세요!)

 

 

▶︎ 환경 변수란?

소프트웨어 애플리케이션에서 사용되는 설정이나 구성 값들을 저장하는 데 사용되며, 시스템 환경과는 분리되어 어플리케이션을 유연하게 설정할 수 있게 해준다.

ex) 애플리케이션 PORT, 도메인 주소, 자격증명, 개인 키 등

 

▶︎  환경 변수를 사용 하는 방법

1. 도커파일 내에서 환경 변수를 직접 정의

2. 환경 변수 파일 생성

 

 

방법1. 도커 파일 내에서 환경 변수를 직접 정의

 

 

 

▶︎  도커 파일 작성

✔︎ ENV 옵션을 사용하면 된다.

FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

ENV PORT 80 # 환경 변수 정의
EXPOSE $PORT

CMD [ "npm", "start" ]
ENV PORT 80 :  PORT는 환경 변수의 '이름'을 지정한 것이며 80은 환경 변수의 DEFAULT 값을 지정한 것

EXPOST $PORT : $PORT는 위에서 정의한 환경 변수를 사용한 것이며 $를 사용해서 환경 변수를 사용했음을 알림

 

 

▶︎  도커 실행 명령어

✔︎ --env 또는 -e 옵션을 사용하여 환경 변수를 지정해줄 수 있다.

✔︎ 환경 변수가 여러 개인 경우 key=value 형태로 계속 나열 해주면 된다.

→ docker run -d --rm -p 3000:8000 --env PORT=8000 --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env

→ docker run -d --rm -p 3000:8000 -e PORT=8000 --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env

 docker run -d --rm -p 3000:8000 -e PORT=8000 -e KEY=VALUE --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env


아까 DEFAULT 값은 80이였지만 이렇게 run 할 때 값을 넣어주면 8000이라는 값으로 환경변수가 셋팅되어 작동한다.

 

방법2. 환경 변수 파일 생성

 

▶︎ .env 파일 생성 후 아래 코드 작성

✔︎ key=value 형태로 작성

PORT=8000

 

▶︎  도커 실행 명령어

✔︎ --env-file 옵션을 사용하여 환경 변수 파일을 지정해줄 수 있다.

→ docker run -d --rm -p 3000:8000 --env-file ./.env --name feedback-app -v feedback:/app/feedback -v /app/node_modules -v /app/temp feedback-node:env

 ./.env 는 .env 파일이 현재 디렉토리에 있다는 것을 의미한다. 따라서 현재 디텍토리에 있는 .env 파일을 환경 변수 파일로 사용하겠다는 의미

 

 

 

어떤 방법이 더 좋을까?

✔︎ 환경 변수는 보통 런타임시에 사용되는 별도의 환경 변수 파일로 이동 시킨다. 그렇지 않으면 값이 이미지에 포함되며 docker history <이미지> 명령어를 통해 이 환경 변수 값을 읽을 수 있다고 한다. 따라서 환경 변수 파일을 생성하여 사용하는 것을 권장한다.

 

✔︎ 별도의 파일을 생성하여 사용하는 경우 소스 컨트롤 저장소의 일부분으로 커밋하지 않도록 조심해야한다.

suhyeon chae
@suhyeon chae :: 번아웃을 이겨내는중

신입 개발자 입니다 😃 github 주소 : https://github.com/chaesuhyeon

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차