[Docker+AWS+Spring] 도커 컨테이너 내에 환경변수를 전달하는 방법
EC2에서 Docker Compose를 사용해서 스프링 내에 웹 애플리케이션에 사용할 환경변수를 설정한다.
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-compose는 docker-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: 백드라운드 실행