[Docker] Dockerfile내부, .env 파일 혹은 터미널을 사용해 환경 변수 설정하는 방법 한 번에 정리하기

2025. 1. 30. 07:49·Docker
반응형

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] 컨테이너와 호스트 머신 간 통신하는 방법 한 번에 정리하기  (0) 2025.02.01
[Docker] docker network 사용해 컨테이너 간 통신하는 방법 완벽 정리  (0) 2025.01.31
[Docker] .dockerignore 사용해 컨테이너에 복사되지 말아야 할 파일 정의하기  (0) 2025.01.29
[Docker] Bind Mount 통해 호스트 머신의 경로를 컨테이너 경로와 연결하기  (0) 2025.01.28
[Docker] Named Volume 이란 무엇인가? 사용 방법과 특징 정리  (0) 2025.01.27


'Docker' 카테고리의 다른 글
  • [Docker] 컨테이너와 호스트 머신 간 통신하는 방법 한 번에 정리하기
  • [Docker] docker network 사용해 컨테이너 간 통신하는 방법 완벽 정리
  • [Docker] .dockerignore 사용해 컨테이너에 복사되지 말아야 할 파일 정의하기
  • [Docker] Bind Mount 통해 호스트 머신의 경로를 컨테이너 경로와 연결하기
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    Coroutines Flow
    numpy
    coroutine
    mockito
    컨테이너
    junit
    unit testing
    코루틴 채널
    unit test
    Coroutines Channel
    Machine Learning
    Kotlin
    코루틴 Flow
    도커
    pytorch
    TensorFlow
    코루틴
    Coroutines Context
    Coroutines
    Docker
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
[Docker] Dockerfile내부, .env 파일 혹은 터미널을 사용해 환경 변수 설정하는 방법 한 번에 정리하기
상단으로

티스토리툴바