6.1 환경 변수 기초
환경 변수는 애플리케이션 구성에서 중요한 역할을 해. 코드를 변경하지 않고도 서비스의 동작과 설정을 동적으로 변경할 수 있게 만들어. Docker Compose는 컨테이너 설정을 위해 환경 변수를 사용하는 것을 지원하니까 구성 관리가 훨씬 유연하고 편리해져.
환경 변수를 관리하는 가장 편리한 방법 중 하나는 .env
파일을 사용하는 거야. 이번 강의에서는 Docker Compose에서 환경 변수를 사용하는 방법, 그리고 .env
파일을 생성하고 사용하는 방법을 자세히 살펴볼 거야.
Docker Compose의 환경 변수 기초
환경 변수는 compose.yaml
파일에서 구성을 매개 변수화하기 위해 사용할 수 있어. 이러한 변수들은 .env
파일에 정의하거나, compose.yaml
파일 내에 직접 정의하거나, 명령줄을 통해 전달할 수 있어.
compose.yaml
에서 환경 변수를 사용하는 예:
이 예에서는 NGINX_VERSION
와 HOST_PORT
변수를 사용하고 있어. 변수 값은 .env
파일에서 설정하거나 명령줄을 통해 설정할 수 있어.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
6.2 .env
파일 사용하기
1. .env
파일 생성
.env
파일은 compose.yaml
파일과 동일한 디렉토리에 배치되며, 환경 변수의 값을 정의하는 "키-값" 쌍을 포함합니다. 각 변수는 새로운 줄에 작성됩니다.
.env
파일 예시:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=admin
DB_PASSWORD=secret
2. Docker Compose와 .env
파일의 통합
Docker Compose는 .env
파일을 자동으로 로드합니다. 단, 그 파일이 compose.yaml
파일과 동일한 디렉토리에 있어야 합니다.
환경 변수를 사용하는 compose.yaml
파일 예시:
이 예시에서는 NGINX_VERSION
, HOST_PORT
, DB_USER
, DB_PASSWORD
변수들이 .env
파일에서 가져옵니다.
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
6.3 변수 전달
명령줄을 통해 변수 전달하기
환경 변수를 유닉스 유사 시스템에서 export
명령어를 사용하거나 Docker Compose에서 --env-file
매개변수를 사용하여 명령줄을 통해 직접 전달할 수 있어.
export
사용 예제:
export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up
--env-file
사용 예제:
--env-file
매개변수를 사용하여 환경 변수 파일을 대체할 수도 있어.
docker compose --env-file .env.dev up
Docker Compose에서 내장 환경 변수 사용하기
Docker Compose는 ${PWD}
와 같이 현재 작업 디렉토리를 나타내는 내장 환경 변수를 지원해.
예제:
version: '3.8'
services:
app:
image: myapp:latest
volumes:
- ${PWD}/app:/app
6.4 실습 예제
환경 변수를 활용한 실습 예제:
예제 1: 웹 서버와 데이터베이스 설정
웹 서버와 데이터베이스에 대한 매개변수로 .env
파일을 만드세요:
NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword
이러한 변수를 사용하는 compose.yaml
파일을 만드세요:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
Docker Compose를 실행하세요:
docker compose up
예제 2: 개발 환경과 프로덕션 환경의 분리
서로 다른 환경을 위한 두 개의 .env
파일을 만드세요: .env.dev
와 .env.prod
.
.env.dev
파일:
NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword
.env.prod
파일:
NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword
이러한 파일에서 변수를 사용하는 compose.yaml
파일을 만드세요:
version: '3.8'
services:
web:
image: nginx:${NGINX_VERSION}
ports:
- "${HOST_PORT}:80"
db:
image: postgres:latest
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
개발을 위한 Docker Compose 실행:
docker compose --env-file .env.dev up
프로덕션을 위한 Docker Compose 실행:
docker compose --env-file .env.prod up
GO TO FULL VERSION