본문 바로가기
카테고리 없음

[Docker] 컨테이너 환경에서 환경 변수(.env)를 안전하게 관리하는 법

by 돌미나리는야생미나리 2026. 4. 7.

애플리케이션을 개발하다 보면 데이터베이스 접속 정보, 외부 API 키, 인증 토큰 등 외부로 노출되어서는 안 되는 민감한 정보를 다루게 됩니다. 도커(Docker) 컨테이너 환경에서는 이러한 설정을 어떻게 관리하느냐가 전체 시스템의 보안 수준을 결정합니다.

오늘은 입문자가 가장 많이 실수하는 부분부터, 현업에서 권장하는 .env 파일을 활용한 환경 변수 관리 및 보안 전략을 상세히 알아보겠습니다.


1. 환경 변수 관리가 중요한 이유

코드 내부에 비밀번호나 API 키를 직접 입력(Hard-coding)하는 것은 매우 위험합니다. 코드가 GitHub와 같은 원격 저장소에 올라가는 순간, 전 세계 누구나 내 서버의 권한을 탈취할 수 있기 때문입니다.

도커 환경에서 환경 변수를 분리하여 관리하면 다음과 같은 이점이 있습니다.

  • 보안성 향상: 민감한 정보를 코드와 분리하여 저장합니다.
  • 유연성: 소스 코드를 수정하지 않고도 개발(Dev), 테스트(Test), 운영(Prod) 환경에 맞는 설정을 즉시 적용할 수 있습니다.
  • 협업 효율: 팀원 간에 공통된 설정 형식을 공유하면서도 개인별 환경에 맞게 조정이 가능합니다.

2. .env 파일 작성 및 도커 연동

가장 대중적인 방법은 프로젝트 루트 디렉토리에 .env 파일을 만드는 것입니다.

2.1 .env 파일 예시

Plaintext
 
# 데이터베이스 설정
DB_HOST=db.example.com
DB_USER=admin
DB_PASSWORD=your_secret_password_1234

# API 키
STRIPE_API_KEY=sk_test_51Mz...

2.2 Docker Run 명령어로 전달하기

컨테이너를 실행할 때 --env-file 옵션을 사용하여 파일의 내용을 한 번에 주입할 수 있습니다.

Bash
 
docker run --env-file .env my-application-image

2.3 Docker Compose에서 활용하기

docker-compose.yml 파일을 사용하면 더 직관적인 관리가 가능합니다.

YAML
 
version: '3.8'
services:
  web:
    image: my-app:latest
    env_file:
      - .env
    ports:
      - "8080:8080"

3. 절대로 잊지 말아야 할 보안 수칙

환경 변수 파일을 사용한다고 해서 보안이 완성되는 것은 아닙니다. 아래 두 가지는 반드시 실천해야 합니다.

3.1 .gitignore에 추가하기

.env 파일이 Git 저장소에 포함되지 않도록 반드시 제외 처리해야 합니다.

Plaintext
 
# .gitignore 파일 내용
.env
.env.local
.env.*.local

3.2 샘플 파일 제공 (.env.example)

팀원들이 어떤 환경 변수가 필요한지 알 수 있도록, 실제 값은 비워두고 키 이름만 적어둔 예시 파일을 공유하는 것이 매너입니다.

Plaintext
 
# .env.example (이 파일은 Git에 올려도 안전합니다)
DB_HOST=
DB_USER=
DB_PASSWORD=

4. 고급 보안 기법: Docker Secrets

만약 단순한 .env 파일을 넘어 더 강력한 보안이 필요하다면 Docker Secrets 기능을 고려해 볼 수 있습니다. 이는 Docker Swarm 모드에서 지원하는 기능으로, 변수 값을 메모리에만 저장하고 디스크에는 암호화하여 보관합니다.

  1. 민감한 정보를 Docker Secret으로 등록합니다.
  2. 컨테이너 실행 시 필요한 서비스에만 해당 Secret을 마운트합니다.
  3. 컨테이너 내부의 /run/secrets/ 경로에서 파일을 읽어 사용합니다.

5. 결론: 안전한 배포를 위한 첫걸음

도커 컨테이너 환경에서 환경 변수를 올바르게 관리하는 것은 '선택'이 아닌 '필수'입니다.

  1. 변수는 파일로 분리하고,
  2. Git 업로드를 방지하며,
  3. **상황에 맞는 도구(Docker Compose, Secrets)**를 선택하는 습관을 들이세요.