Dockerfile 환경 변수 이해 및 구성

DockerBeginner
지금 연습하기

소개

이 튜토리얼에서는 Docker Dockerfile 에서 환경 변수를 사용하는 기본 사항을 안내합니다. 컨테이너화된 애플리케이션의 유연성과 이식성을 높이기 위해 환경 변수를 정의, 관리 및 활용하는 방법을 배울 것입니다. 이 문서를 마치면 Docker 개발 및 배포 워크플로우를 간소화하기 위해 환경 변수를 활용하는 방법에 대한 확실한 이해를 얻게 될 것입니다.

Docker 환경 변수 이해

Docker 환경 변수는 Docker 컨테이너의 동작을 사용자 지정할 수 있는 강력한 기능입니다. 컨테이너 내에서 실행되는 애플리케이션에 구성 데이터를 전달하는 방법을 제공하며, 애플리케이션 자체에 직접 하드코딩할 필요가 없습니다. 이는 애플리케이션 코드를 수정하지 않고도 환경 변수만 변경하여 애플리케이션을 더욱 이식 가능하고 관리하기 쉽게 만듭니다.

Docker 환경 변수는 다양한 정보를 저장하는 데 사용될 수 있습니다. 예를 들어:

  • 데이터베이스 연결 세부 정보 (예: 호스트, 포트, 사용자 이름, 비밀번호)
  • API 키 또는 기타 민감한 데이터
  • 기능 플래그 또는 구성 설정
  • 외부 리소스 경로 (예: 로그 파일, 임시 디렉토리)

환경 변수를 사용하면 이미지를 다시 빌드하지 않고도 Docker 컨테이너를 개발, 스테이징, 프로덕션과 같은 다양한 환경에 쉽게 적응시킬 수 있습니다.

graph TD A[Docker 컨테이너] --> B[애플리케이션] B --> C[환경 변수] C --> D[구성 데이터]

위의 다이어그램에서 Docker 컨테이너 내에서 실행되는 애플리케이션에 구성 데이터를 전달하는 데 환경 변수가 어떻게 사용되는지 확인할 수 있습니다.

표 1: Docker 환경 변수의 일반적인 사용 사례

사용 사례 예시
데이터베이스 연결 DB_HOST, DB_PORT, DB_USER, DB_PASSWORD
API 키 API_KEY, API_SECRET
기능 플래그 ENABLE_FEATURE_X, DISABLE_FEATURE_Y
외부 리소스 경로 LOG_DIR, TEMP_DIR

Docker 에서 환경 변수의 역할을 이해함으로써 다양한 환경에서 쉽게 배포 및 구성할 수 있는 더 유연하고 유지 관리 가능한 애플리케이션을 작성할 수 있습니다.

Dockerfile 에서 환경 변수 정의

Dockerfile 에서 환경 변수를 정의하려면 ENV 명령어를 사용합니다. 이 명령어는 런타임 중 컨테이너에서 사용할 수 있도록 하나 이상의 환경 변수를 설정할 수 있도록 합니다.

Dockerfile 에서 환경 변수를 정의하는 예는 다음과 같습니다.

## 단일 환경 변수 설정
ENV APP_ENV=production

## 여러 환경 변수 설정
ENV DB_HOST=mysql DB_PORT=3306 DB_USER=myuser DB_PASSWORD=secret

위의 예제에서 먼저 APP_ENV라는 단일 환경 변수를 production 값으로 설정합니다. 그런 다음 DB_HOST, DB_PORT, DB_USER, DB_PASSWORD라는 여러 환경 변수를 설정합니다.

이러한 환경 변수는 컨테이너 내에서 실행되는 애플리케이션에서 액세스하고 사용할 수 있습니다.

graph TD A[Dockerfile] --> B[ENV 명령어] B --> C[환경 변수] C --> D[컨테이너 런타임] D --> E[애플리케이션]

ENV 명령어는 컨테이너 실행 시 --env 또는 -e 플래그를 사용하여 재정의할 수 있는 환경 변수의 기본값을 설정하는 데에도 사용할 수 있습니다.

## APP_ENV 변수의 기본값 설정
ENV APP_ENV=development

이 예제에서 APP_ENV 변수는 컨테이너 실행 시 재정의되지 않으면 development로 설정됩니다.

표 1: Dockerfile ENV 명령어 예시

명령어 예시
단일 변수 ENV APP_ENV=production
여러 변수 ENV DB_HOST=mysql DB_PORT=3306 DB_USER=myuser DB_PASSWORD=secret
기본값 설정 ENV APP_ENV=development

Dockerfile 에서 환경 변수를 정의하면 Docker 컨테이너를 다양한 환경에 맞게 구성하고 적응시킬 수 있으므로 배포 및 유지 관리를 더욱 용이하게 만들 수 있습니다.

환경 변수 관리 및 사용

컨테이너에서 환경 변수 액세스

Dockerfile 에서 환경 변수를 정의한 후에는 실행 중인 컨테이너 내에서 표준 셸 구문을 사용하여 이러한 변수에 액세스할 수 있습니다. 예를 들어, Bash 스크립트에서 DB_HOST 환경 변수의 값에 다음과 같이 액세스할 수 있습니다.

echo "Database host: $DB_HOST"

사용하는 프로그래밍 언어 및 프레임워크에 따라 애플리케이션 코드에서도 환경 변수를 사용할 수 있습니다.

런타임 시 환경 변수 재정의

Docker 컨테이너를 실행할 때 --env 또는 -e 플래그를 사용하여 Dockerfile 에 정의된 환경 변수를 재정의할 수 있습니다. 이를 통해 이미지를 다시 빌드하지 않고도 컨테이너의 동작을 쉽게 사용자 지정할 수 있습니다.

docker run -e DB_HOST=192.168.1.100 -e DB_PASSWORD=newpassword myapp

이 예제에서는 DB_HOSTDB_PASSWORD 환경 변수가 런타임 시 재정의되어 Dockerfile 에 정의된 값보다 우선적으로 적용됩니다.

Docker Compose 를 이용한 환경 변수 관리

애플리케이션을 관리하기 위해 Docker Compose 를 사용하는 경우 docker-compose.yml 파일의 environment 섹션에 환경 변수를 정의할 수 있습니다. 이를 통해 전체 애플리케이션 스택의 구성을 중앙화할 수 있습니다.

version: "3"
services:
  web:
    image: myapp
    environment:
      DB_HOST: mysql
      DB_PORT: 3306
      DB_USER: myuser
      DB_PASSWORD: secret
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret

이 예제에서는 web 서비스의 환경 변수가 environment 섹션에 정의되어 있으며, mysql 서비스에도 자체 환경 변수가 정의되어 있습니다.

graph TD A[Docker Compose] --> B[환경 변수] B --> C[Docker 컨테이너] C --> D[애플리케이션]

이러한 방식으로 환경 변수를 관리하면 애플리케이션을 쉽게 확장하고 서비스를 교체하며 다양한 환경에서 일관된 구성을 유지할 수 있습니다.

요약

이 자세한 튜토리얼에서는 Docker Dockerfile 에서 환경 변수의 중요성을 배웠습니다. 환경 변수를 정의하고 관리하는 방법과 컨테이너화된 애플리케이션 내에서 효과적으로 활용하는 방법을 살펴보았습니다. Dockerfile 환경 변수 개념을 숙달함으로써, 다양한 배포 환경에 적응하는 더 유연하고 구성 가능하며 유지 관리 가능한 Docker 기반 솔루션을 만들 수 있습니다. 이 지식은 조직의 진화하는 요구 사항을 충족하는 강력하고 확장 가능한 Docker 기반 애플리케이션을 구축하는 데 도움이 될 것입니다.