20250107 TIL : Docker Compose에서 환경변수 다루기

MCS·2025년 1월 7일

TIL

목록 보기
39/45

오늘 학습한 내용

  • Docker Compose에서 환경변수 다루기
    • Compose 파일에 직접 입력
    • 쉘 환경변수 등록
    • 환경변수 파일 구성
    • Dockerfile에 직접 입력
    • 주의점

Docker Compose에서 환경변수 다루기

Docker Compose에서 환경변수를 주입하는 방법을 여러 가지 알아보았다.

Compose 파일에 직접 입력

Compose 파일에서 services.<서비스명>.environment 부분에 해당 내용을 변수명: 값 또는 - 변수명=값 형태로 넣어준다.

아래 예시는 mysql의 루트 패스워드를 입력한 docker compose 파일의 일부이다.

version: '3.9'
services:
  mysql:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: password

쉘 환경변수 등록

쉘의 환경변수에 등록해놓고, 이것을 가져와서 사용할 수 있다.

$ export MYSQL_ROOT_PASSWORD=password

Compose 파일은 다음과 같이 작성할 수 있다. 직접 입력하는 것과 비교해보면, MYSQL_ROOT_PASSWORD에 password${MYSQL_ROOT_PASSWORD}으로 대체되었다.

version: '3.9'
services:
  mysql:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

환경변수 파일 구성

Compose 파일이 위치한 동일 경로에 .env 파일을 만든다. 이 .env 파일은 평문 텍스트 포맷으로, 아래의 문법을 따라 작성해야 한다.

  • 각 줄마다 변수명=값의 형태로 입력한다.
  • 주석 처리는 # 문자를 이용한다.
  • 비어있는 줄은 무시된다.
  • 따옴표 처리('', "")는 불필요하다. 입력된 따옴표는 위치에 따라 변수명이나 값의 일부분으로 간주된다.

앞서 쉘 환경변수와 설정했던 것과 같이 compose 파일을 작성한다.

version: '3.9'
services:
  mysql:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

.env 파일에 다음과 같이 작성한다.

MYSQL_ROOT_PASSWORD=password

이 방식은 Docker Compose에서 docker compose up 명령어를 수행할 때에만 활용 가능하다.

Dockerfile에 직접 입력

Dockerfile에 ARG 또는 ENV를 이용하여 환경변수를 직접 삽입해 이미지를 빌드하는 방법도 가능하다.

FROM mysql:8
ENV MYSQL_ROOT_PASSWORD password

주의점

이렇게 환경변수를 삽입하는 경우, 모든 정보가 평문으로 저장되기 때문에 보안 측면에서 매우 위험하다.

따라서 AWS Secrets Manager, GitHub Secrets등을 사용해 안전하게 정보를 관리하거나, .env파일은 .gitingore에 추가하고 따로 관리하는 방법 등을 고려할 수 있다.

profile
백엔드를 잘 하고 싶은 사람

0개의 댓글