본문 바로가기
DevOps/Docker

Docker(5) - 환경 변수

by 재성스 2024. 8. 21.
반응형

환경 변수란? 운영체제에서 실행되는 프로세스들이 설정된 특정 값을 참조하거나 동적으로 설정할 수 있도록 하는 방법이다.

Docker에서 환경변수는 중요한 역할을하며, 컨테이너 내부에서 동작하는 애플리케이션에 설정을 전달하는 수단이다. 예를 들어, 데이터베이스 연결 정보, API 키, 포트 설정 등이 포함될 수 있다. 

 

Docker에서 환경변수를 설정하는 방법

1. `e` 또는 `--env` 옵션 사용

`docker run` 명령어에서 -e 또는 --env 옵션을 사용하여 환경변수를 설정할 수 있다. 

docker run -e "ENV_VAR_NAME=value" {image명}

- 이 명령어는 `ENV_VAR_NAME` 이라는 이름의 환경변수를 `value`로 설정한 상태로 지정한 이미지 컨테이너를 실행한다. 

2. `.env` 파일 사용

환경변수를 여러 개 사용할 때, .env 파일을 만들어 한 번에 로드할 수 있다. 

# test.env 파일 

ENV_VAR1=value1
ENV_VAR2=value2

- 이 파일을 Docker 컨테이너에 로드하려면 `--env-file` 옵션을 사용한다.

docker run --env-file {env파일경로/env파일명} {이미지명}

 

3. Docker Compose에서 환경변수 사용

Docker Compose 파일에서도 환경변수를 설정할 수 있으며, 파일의 environment 섹션에서 환경 변수를 정의한다. 

# yaml

version: '1'
services:
  web:
    image: {이미지명}
    environment:
      - ENV_VAR_NAME1=value1
      - ENV_VAR_NAME2=value2

 

4. Dockerfile에서 환경변수 설정

Dockerfile에서 `ENV` 명령어를 사용해 이미지를 빌드할 떄 기본 환경변수를 설정할 수 있다.

#Dockerfile

FROM ubuntu:latest
ENV MY_ENV_VAR=my_value

 

 

예제를 통해 환경변수 익혀보기

 

Python 애플리케이션을 통한 환경변수 활용

1. Python 프로젝트 생성 및 이동

mkdir python-docker-env   # 프로젝트 디렉토리 생성
cd python-docker-env      # 생성한 디렉토리로 이동

2. Python 스크립트 파일 작성

nano test.py

- nano 편집기 또는 vim, vi 등을 사용

# test.py

import os

greeting = os.getenv("GREETING", "Hello")
name = os.getenv("NAME", "World")

print(f"{greeting}, {name}!")

 

3. Dockerfile 작성

nano Dockerfile           # Dockerfile 작성
# Dockerfile

FROM python:3.9-slim

WORKDIR /app

COPY test.py /app

CMD ["python", "test.py"]

 

4. env 파일 작성 

nano .env   # .env 파일 작성
#.env 

GREETING=Hey
NAME=Jay

 

5. Docker 이미지 빌드

docker build -t python-env-test .   # Docker 이미지 빌드

- docker build 명령어를 사용하여 현재 디렉토리에 있는 Dockerfile을 기반으로 Docker 이미지를 빌하며, -t 옵션을 사용하여 이미지를 python-env-test 라는 이름으로 태그

6. Docker 컨테이너 실행

  • 기본 환경변수로 실행
docker run --rm python-env-test
  • 환경변수를 전달하여 실행
docker run --rm -e GREETING="What's" -e NAME="up" python-env-test
  • .env 파일을 사용하여 실행
docker run --rm --env-file .env python-env-test

 

반응형