Docker의 환경 변수
Docker는 컨테이너를 실행하면서 환경 변수를 쉽게 설정하고 관리할 수 있는 방법을 제공한다. 환경 변수는 애플리케이션의 동작을 제어하거나, 민감한 정보(예: 데이터베이스 연결 정보, API 키 등)를 외부에서 주입할 때 유용하며, Docker에서는 이를 Dockerfile내부, .env 파일 혹은 터미널을 통해 설정할 수 있도록 한다.
지금부터 각 방법을 살펴보자.
Docker 환경 변수 설정하기
Dockerfile에 설정하기
Dockerfile에 환경 변수를 설정하기 위해서는 다음과 같이 사용하면 된다.
ENV [KEY] [VALUE]
예를 들어 PORT라는 환경 변수를 8080으로 설정하고 싶은 경우 다음과 같이 사용하면 된다.
# 환경변수 설정
ENV PORT=8080
.env 파일에 설정하기
.env 파일을 사용하면 환경 변수를 별도의 파일에 정의해 관리할 수 있다. 이 방법은 특히 민감한 정보를 코드와 분리하거나, 여러 환경(개발, 테스트, 운영 등)에서 다른 설정을 사용해야 할 때 유용하다.
.env 파일을 작성하는 방법은 간단하다. 단순히 각 줄에 KEY=VALUE 형식으로 값을 작성하면 된다.
# .env 파일
PORT=8080
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=secret
이렇게 설정된 .env 파일은 docker-compose.yml 파일 내부에서 서비스의 env_file 값으로 넘겨지는 방식으로 사용될 수 있다.
services:
mongodb:
image: mongo
...
env_file:
- ./.env
혹은 docker run 시에는 --env-file 다음과 같이 사용될 수 있다.
docker run --env-file [.env 파일 경로] [Image Name]
터미널 통해 설정하기
터미널을 통해 설정할 때는 -e 옵션과 함께 [Key]=[Value]를 넘기는 방식으로 사용하면 된다.
docker run -d -p 8080:8080 --name my-app -e PORT=8080 -e DB_HOST=localhost -e DB_USER=root -e DB_PASSWORD=secret [Image Name]
환경 변수의 우선순위
Docker는 환경 변수를 처리할 때 특정 우선순위를 따른다. 동일한 변수 이름이 여러 곳에서 정의된 경우, 다음 순서로 우선순위가 적용된다.
1. 터미널에서 명시적으로 설정한 환경 변수 (docker run 명령어의 -e 옵션)
2. .env 파일에 정의된 환경 변수
3. Dockerfile에 정의된 ENV 변수
예를 들어, Dockerfile에 ENV PORT=3000이 정의되어 있고 .env 파일에는 PORT=4000이, docker run 명령어로 -e PORT=5000을 전달하면 컨테이너 내부에서는 PORT=5000이 사용된다. 즉, 터미널에서 설정된 환경 변수가 가장 우선한다.
환경 변수 사용하기
Dockerfile 내부에서 사용하기
설정된 환경 변수는 Dockerfile 내부에서 ${KEY NAME}를 통해 접근할 수 있다.
ENV PORT=3000
EXPOSE $PORT
Docker Compose에서 사용하기
Docker Compose에서는 ${[Key Name]} 을 통해 환경 변수에 접근할 수 있다. 예를 들어 다음과 같이 사용할 수 있다.
version: '3.8'
services:
app:
image: my-spring-app:latest
env_file:
- ./.env
ports:
- "${HOST_PORT}:${INTERNAL_PORT}"
environment:
- APP_ENV=${APP_ENV}
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT}
'Docker' 카테고리의 다른 글
[Docker] .dockerignore 사용해 컨테이너에 복사되지 말아야 할 파일 정의하기 (0) | 2025.01.29 |
---|---|
[Docker] Bind Mount 통해 호스트 머신의 경로를 컨테이너 경로와 연결하기 (0) | 2025.01.28 |
[Docker] Named Volume 이란 무엇인가? 사용 방법과 특징 정리 (0) | 2025.01.27 |
[Docker] Anonymous Volume(익명 볼륨) 한 번에 정리하기 (0) | 2025.01.26 |
Docker Hub에 이미지 업로드 하기 (0) | 2025.01.25 |