[Docker+AWS+Spring] 도커 컨테이너 내에 환경변수를 전달하는 방법

EC2에서 Docker Compose를 사용해서 스프링 내에 웹 애플리케이션에 사용할 환경변수를 설정한다.
dustjq1005 · 2025년 02월 15일

Spring Web Application이 컨테이너 내부에 존재하기 때문에 EC2 환경변수를 바로 가져다 쓸 수 없습니다. 환경 변수를 Docker로 전달해줘야 사용할 수 있는데요.

Docker-compose를 이용해서 환경변수를 설정하는 방법을 알아보겠습니다. 우선, EC2에 접속을 해줍니다.

1. Docker-compose 설치

1. Docker Compose 설치 확인

먼저, Docker Compose가 이미 설치되어 있는지 확인해봅니다.

docker-compose --version
or
docker compose version

설치되어 있다면 버전 정보가 출력되고, 아니라면 command not found❌ 그런데 뭐 없으니 당연히 not found가 뜨겠죠.

2. Docker 최신 버전 확인 업데이트

최신 버전 확인

docker --version

docker 업데이트

sudo yum update -y
sudo yum install docker -y

3. Docker Compose 설치

sudo yum install docker-compose-plugin -y

4. 설치 확인

docker compose version

2. .env, docker-compose.yml 파일 작성

1. docker-compose.yml 작성

docker-composedocker-compse.yml을 토대로 동작합니다. docker-compose의 용도는 여러 컨테이너를 가지는 애플리케이션을 통합적으로 만들고, 각각의 컨테이너를 시작 및 중지하는 작업을 더 쉽게 수행할 수 있도록 해준다고 합니다. 컨테이너 관리 툴이라고 볼 수 있을 것 같은데, 환경변수를 셋팅하거나 환경변수가 작성되어있는 .env 파일을 불러서 쓸 수 있는 기능도 제공합니다.

2. 파일 위치 정하기

두 파일들은 프로젝트 내부 또는 외부 경로에 위치시킬 수 있는데 프로젝트 내부 보단 따로 관리하는게 보안상 더 낫겠죠.

  • 환경변수에 있는 값들은 외부로 노출되면 안되기 때문에 깃이나 도커 같은 외부 노출 위험이 있는 곳에 있으면 안됩니다.

경로 저는 아래와 같은 경로로 설정했고 앱은 다른 디렉토리에 두었습니다.

/home/docker/private/

docker-compose.yml 파일 내용

version: '3.8'
services:
  app:
    image: my-private-image
    env_file:
      - .env
    ports:
      - "8080:8080"
  • env_file: {.env 파일 경로}

env 파일 위치를 설정합니다. 저는 docker-compose.yml과 같은 디렉토리안에 있습니다.

.env 파일 생성

sudo vi .env

vi 편집기로 .env파일 생성

.env 파일 내용

SPRING_PROFILES_ACTIVE=dev

spring에 사용할 환경변수를 설정하고 편집 내용을 저장합니다.

3. docker-compose 실행

docker-compose up -d

이제 docker-compose.yml 파일이 있는 디렉터리로 이동하고, 위에 명령어를 실행시킵니다. 위에 명령어는 Docker Compose를 사용하여 컨테이너를 백그라운드에서 실행하는 역할을 합니다.

  • docker-compose : Docker Compose CLI(Command Line Interface) 를 실행하는 명령어.
  • up : docker-compose.yml 파일에 정의된 모든 서비스(컨테이너)를 실행.
  • 컨테이너가 없으면 새로 생성.
  • 컨테이너가 이미 실행 중이면 변경 사항이 있는 경우 업데이트.
  • docker-compose.yml에서 정의한 네트워크와 볼륨도 함께 설정됨.
  • -d: 백드라운드 실행

Comments