CodeGym /행동 /Docker SELF /Docker Compose에서 환경 변수

Docker Compose에서 환경 변수

Docker SELF
레벨 16 , 레슨 0
사용 가능

6.1 환경 변수 기초

환경 변수는 애플리케이션 구성에서 중요한 역할을 해. 코드를 변경하지 않고도 서비스의 동작과 설정을 동적으로 변경할 수 있게 만들어. Docker Compose는 컨테이너 설정을 위해 환경 변수를 사용하는 것을 지원하니까 구성 관리가 훨씬 유연하고 편리해져.

환경 변수를 관리하는 가장 편리한 방법 중 하나는 .env 파일을 사용하는 거야. 이번 강의에서는 Docker Compose에서 환경 변수를 사용하는 방법, 그리고 .env 파일을 생성하고 사용하는 방법을 자세히 살펴볼 거야.

Docker Compose의 환경 변수 기초

환경 변수는 compose.yaml 파일에서 구성을 매개 변수화하기 위해 사용할 수 있어. 이러한 변수들은 .env 파일에 정의하거나, compose.yaml 파일 내에 직접 정의하거나, 명령줄을 통해 전달할 수 있어.

compose.yaml에서 환경 변수를 사용하는 예:

이 예에서는 NGINX_VERSIONHOST_PORT 변수를 사용하고 있어. 변수 값은 .env 파일에서 설정하거나 명령줄을 통해 설정할 수 있어.

Yaml

version: '3.8'

services:
  web:
    image: nginx:${NGINX_VERSION}
    ports:
      - "${HOST_PORT}:80"

6.2 .env 파일 사용하기

1. .env 파일 생성

.env 파일은 compose.yaml 파일과 동일한 디렉토리에 배치되며, 환경 변수의 값을 정의하는 "키-값" 쌍을 포함합니다. 각 변수는 새로운 줄에 작성됩니다.

.env 파일 예시:

.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 파일에서 가져옵니다.

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}

6.3 변수 전달

명령줄을 통해 변수 전달하기

환경 변수를 유닉스 유사 시스템에서 export 명령어를 사용하거나 Docker Compose에서 --env-file 매개변수를 사용하여 명령줄을 통해 직접 전달할 수 있어.

export 사용 예제:

Terminal

export NGINX_VERSION=latest
export HOST_PORT=8080
docker compose up

--env-file 사용 예제:

--env-file 매개변수를 사용하여 환경 변수 파일을 대체할 수도 있어.

Terminal

docker compose --env-file .env.dev up

Docker Compose에서 내장 환경 변수 사용하기

Docker Compose는 ${PWD}와 같이 현재 작업 디렉토리를 나타내는 내장 환경 변수를 지원해.

예제:

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    volumes:
      - ${PWD}/app:/app

6.4 실습 예제

환경 변수를 활용한 실습 예제:

예제 1: 웹 서버와 데이터베이스 설정

웹 서버와 데이터베이스에 대한 매개변수로 .env 파일을 만드세요:

.env

NGINX_VERSION=1.19.3
HOST_PORT=8080
DB_USER=myuser
DB_PASSWORD=mypassword

이러한 변수를 사용하는 compose.yaml 파일을 만드세요:

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를 실행하세요:

Terminal

docker compose up

예제 2: 개발 환경과 프로덕션 환경의 분리

서로 다른 환경을 위한 두 개의 .env 파일을 만드세요: .env.dev.env.prod.

.env.dev 파일:

.env

NGINX_VERSION=latest
HOST_PORT=8080
DB_USER=devuser
DB_PASSWORD=devpassword

.env.prod 파일:

.env

NGINX_VERSION=1.19.3
HOST_PORT=80
DB_USER=produser
DB_PASSWORD=prodpassword

이러한 파일에서 변수를 사용하는 compose.yaml 파일을 만드세요:

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 실행:

Terminal

docker compose --env-file .env.dev up

프로덕션을 위한 Docker Compose 실행:

Terminal

docker compose --env-file .env.prod up
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION