Docker 환경 변수

Beginner
지금 연습하기

소개

이 포괄적인 튜토리얼에서는 Docker 컨테이너에서 환경 변수를 전달하고 관리하는 과정을 안내합니다. 환경 변수를 활용하여 컨테이너화된 애플리케이션을 구성하고 실행하는 방법을 배우고, 이를 통해 유연성, 확장성 및 유지 관리 용이성을 확보할 수 있습니다. Docker 사용자이든 초보이든, 이 가이드는 Docker 기반 인프라에서 환경 변수를 효과적으로 사용하기 위한 지식과 최선의 방법을 제공합니다.

Docker 환경 변수 소개

Docker 는 개발자가 일관되고 재현 가능한 방식으로 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 인기 있는 컨테이너화 플랫폼입니다. Docker 의 주요 기능 중 하나는 컨테이너 내에서 애플리케이션을 구성하고 실행하는 데 필수적인 환경 변수를 관리하는 기능입니다.

환경 변수는 애플리케이션 코드 외부에 구성 데이터를 저장하고 액세스하는 방법을 제공하는 소프트웨어 개발의 기본적인 개념입니다. Docker 의 맥락에서 환경 변수는 컨테이너화된 애플리케이션의 런타임 환경을 정의하는 데 중요한 역할을 합니다.

Docker 컨테이너에 환경 변수를 전달하는 방법을 이해함으로써 개발자는 애플리케이션이 유연하고 확장 가능하며 쉽게 구성될 수 있도록 할 수 있습니다. 이는 애플리케이션 코드에서 민감한 정보를 분리하여 더 나은 이식성, 더 쉬운 배포 및 향상된 보안을 가능하게 합니다.

이 튜토리얼에서는 Docker 에서 환경 변수를 사용하는 다양한 측면을 살펴볼 것입니다.

Docker 컨테이너에서의 환경 변수 이해

  • 환경 변수는 무엇이며 Docker 에서 어떻게 작동합니까?
  • 환경 변수는 Docker 컨테이너 내에서 어떻게 저장되고 액세스됩니까?
  • Docker 컨테이너에서 사용 가능한 기본 환경 변수를 살펴봅니다.

Docker 컨테이너에 환경 변수 전달

  • Docker 컨테이너에 환경 변수를 전달하는 다양한 방법.
  • docker run 명령에서 --env 또는 -e 플래그 사용.
  • Dockerfile에서 ENV 지시문을 사용하여 환경 변수 정의.
  • 호스트 시스템에서 컨테이너로 환경 변수 전달.

Docker Compose 에서 환경 변수 사용

  • Docker Compose 구성에서 환경 변수 활용.
  • docker-compose.yml 파일에서 환경 변수 정의.
  • Compose 구성 내에서 환경 변수 참조.
  • 런타임에 환경 변수 재정의.

Docker 에서 환경 변수 보안

  • 민감한 환경 변수를 보호하는 중요성.
  • API 키, 암호 및 비밀과 같은 민감한 데이터를 저장하고 관리하는 최선의 방법.
  • 환경 변수 암호화, 비밀 관리 서비스 및 환경 변수 치환과 같은 도구 및 기술 활용.

Docker 에서 환경 변수 관리를 위한 최선의 방법

  • 유지 관리 및 확장성을 위해 환경 변수를 구성 및 구조화.
  • 환경 변수 명명 규칙 및 최선의 방법 구현.
  • 다양한 배포 환경에서 환경 변수 관리 전략.
  • 도구 및 스크립트를 사용하여 환경 변수 관리 자동화.

이 튜토리얼을 마치면 Docker 의 맥락에서 환경 변수를 효과적으로 사용하는 방법에 대한 포괄적인 이해를 얻게 되어 더욱 강력하고 구성 가능한 컨테이너화된 애플리케이션을 구축하고 배포할 수 있을 것입니다.

Docker 컨테이너에서의 환경 변수 이해

환경 변수는 소프트웨어 개발에서 기본적인 개념이며, Docker 컨테이너 내에서 애플리케이션을 구성하고 실행하는 데 중요한 역할을 합니다. 이 섹션에서는 Docker 환경에서 환경 변수의 특성과 컨테이너 환경 내에서의 저장 및 액세스 방법을 살펴봅니다.

환경 변수란 무엇인가요?

환경 변수는 구성 데이터, 민감한 정보 및 기타 런타임 매개변수를 저장하는 키 - 값 쌍의 집합입니다. 일반적으로 운영 체제 수준에서 정의되며, 시스템에서 실행되는 애플리케이션에서 액세스할 수 있습니다.

Docker 의 맥락에서 환경 변수는 컨테이너화된 애플리케이션의 런타임 환경을 구성하는 데 유사한 역할을 합니다. 이러한 변수는 애플리케이션 특정 설정, 데이터베이스 연결 세부 정보 지정 또는 API 키나 암호와 같은 민감한 정보를 저장하는 데 사용될 수 있습니다.

Docker 컨테이너에서의 환경 변수

Docker 컨테이너를 실행하면 기본적으로 호스트 시스템의 환경 변수를 상속합니다. 또한 docker run 명령이나 Dockerfile 내에서 컨테이너에 환경 변수를 명시적으로 정의하고 전달할 수 있습니다.

컨테이너 내부에서는 일반적인 운영 체제와 마찬가지로 echo 명령이나 $ 접두사와 같은 메커니즘을 사용하여 환경 변수에 액세스할 수 있습니다.

## Docker 컨테이너 내에서 환경 변수 액세스
echo $MY_VARIABLE

Docker 컨테이너의 기본 환경 변수

Docker 는 모든 컨테이너에서 사용 가능한 기본 환경 변수 집합을 제공합니다. 이러한 변수는 컨테이너, Docker 데몬 및 호스트 시스템에 대한 정보를 포함합니다. 일반적인 기본 환경 변수는 다음과 같습니다.

변수 설명
HOSTNAME 컨테이너의 호스트 이름
HOME 컨테이너를 실행하는 사용자의 홈 디렉토리
PATH 실행 파일 검색 경로
TERM 터미널 유형 (예: xterm)
DOCKER_VERSION Docker 데몬의 버전
DOCKER_HOST Docker 데몬의 URL

Docker 컨테이너 내에서 다음 명령을 실행하여 기본 환경 변수의 전체 목록을 볼 수 있습니다.

env

Docker 컨테이너에서 환경 변수의 역할과 사용 가능한 기본 변수를 이해하는 것은 컨테이너화된 애플리케이션을 효과적으로 구성하고 관리하는 데 필수적입니다.

Docker 컨테이너에 환경 변수 전달

Docker 컨테이너에 환경 변수를 전달하는 방법은 여러 가지가 있으며, 각 방법에는 고유한 사용 사례와 장점이 있습니다. 이 섹션에서는 다양한 방법을 탐색하고 Docker 기반 애플리케이션에서 환경 변수를 효과적으로 관리하는 방법을 이해하는 데 도움이 되는 예제를 제공합니다.

--env 또는 -e 플래그 사용

Docker 컨테이너에 환경 변수를 전달하는 가장 간단한 방법은 docker run 명령을 실행할 때 --env 또는 -e 플래그를 사용하는 것입니다. 이를 통해 하나 이상의 환경 변수와 해당 값을 지정할 수 있습니다.

docker run -e MY_VARIABLE=my_value -e ANOTHER_VARIABLE=another_value my-image

Dockerfile 에서 환경 변수 정의

Dockerfile에서 ENV 명령을 사용하여 환경 변수를 직접 정의할 수도 있습니다. 이 방법은 컨테이너화된 애플리케이션의 모든 인스턴스에 공통적인 환경 변수가 있는 경우 유용합니다.

## Dockerfile
FROM ubuntu:latest
ENV MY_VARIABLE=my_value
ENV ANOTHER_VARIABLE=another_value
## 나머지 Dockerfile 명령어

이 Dockerfile 을 사용하여 이미지를 빌드하면 결과 컨테이너 내에서 환경 변수를 사용할 수 있습니다.

호스트 시스템에서 환경 변수 전달

일부 경우 호스트 시스템 (Docker 데몬을 실행하는 컴퓨터) 의 환경 변수를 컨테이너로 전달하고 싶을 수 있습니다. 이는 동일한 --env 또는 -e 플래그를 사용하여, 명시적인 값 없이 변수 이름만 지정하여 달성할 수 있습니다.

docker run -e MY_VARIABLE -e ANOTHER_VARIABLE my-image

이렇게 하면 호스트 시스템의 MY_VARIABLEANOTHER_VARIABLE 환경 변수 값이 컨테이너로 전달됩니다.

환경 변수 재정의

Dockerfile 과 docker run 명령에서 모두 환경 변수를 정의하는 경우 docker run 명령의 값이 우선합니다. 이를 통해 런타임에 환경 변수를 쉽게 재정의할 수 있으며, 이는 서로 다른 배포 환경이나 테스트 시나리오를 관리하는 데 유용할 수 있습니다.

Docker 컨테이너에 환경 변수를 전달하는 이러한 다양한 방법을 이해함으로써 컨테이너화된 애플리케이션의 런타임 환경을 효과적으로 구성하고 관리하여 유연하고 확장 가능하며 안전하게 만들 수 있습니다.

Docker Compose 에서 환경 변수 사용

Docker Compose 는 여러 컨테이너 Docker 애플리케이션을 정의하고 관리할 수 있는 도구입니다. Docker Compose 를 사용할 때 환경 변수를 활용하여 컨테이너화된 서비스의 런타임 환경을 구성할 수 있습니다.

docker-compose.yml 파일에서 환경 변수 정의

docker-compose.yml 파일에서 각 서비스의 environment 섹션 아래에 환경 변수를 정의할 수 있습니다. 예를 들어:

version: "3"
services:
  web:
    image: my-web-app
    environment:
      - DB_HOST=database
      - DB_PASSWORD=secret
  database:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=secret

이 예제에서 web 서비스는 DB_HOSTDB_PASSWORD 환경 변수에 액세스하고, database 서비스는 MYSQL_ROOT_PASSWORD 환경 변수가 정의되어 있습니다.

docker-compose.yml 파일에서 환경 변수 참조

docker-compose.yml 파일 내에서 $ 접두사를 사용하여 호스트 시스템의 환경 변수를 참조할 수도 있습니다. 이는 민감하거나 동적인 환경 변수를 컨테이너화된 서비스에 전달하려는 경우 유용합니다.

version: "3"
services:
  web:
    image: my-web-app
    environment:
      - DB_HOST=database
      - DB_PASSWORD=$DB_PASSWORD
  database:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD

이 예제에서 DB_PASSWORDMYSQL_ROOT_PASSWORD 환경 변수는 호스트 시스템에서 각 서비스로 전달됩니다.

런타임 환경 변수 재정의

Docker Compose 애플리케이션을 실행할 때 docker-compose.yml 파일에 정의된 환경 변수를 docker-compose 명령을 실행하는 환경에서 설정하여 재정의할 수 있습니다. 예를 들어:

DB_PASSWORD=new_secret MYSQL_ROOT_PASSWORD=new_secret docker-compose up -d

이렇게 하면 docker-compose.yml 파일에 정의된 DB_PASSWORDMYSQL_ROOT_PASSWORD 환경 변수의 값이 새 값으로 재정의됩니다.

Docker Compose 구성에서 환경 변수를 활용함으로써 여러 컨테이너 애플리케이션이 유연하고 확장 가능하며 쉽게 구성될 수 있도록 하여 다양한 배포 환경을 관리하고 컨테이너화된 인프라를 유지 관리하기가 더 쉬워집니다.

Docker 에서 환경 변수 보안

Docker 를 사용할 때 API 키, 비밀번호 및 기타 비밀 정보와 같은 민감한 정보를 적절히 보호하는 것이 중요합니다. 이러한 민감한 환경 변수를 노출하면 보안 위협이 발생하고 컨테이너화된 애플리케이션의 무결성이 손상될 수 있습니다. 이 섹션에서는 Docker 에서 환경 변수를 보호하기 위한 다양한 기술과 모범 사례를 살펴봅니다.

민감한 환경 변수 보호의 중요성

환경 변수는 종종 무단 액세스로부터 보호되어야 하는 민감한 정보를 포함할 수 있습니다. 이러한 정보에는 다음이 포함됩니다.

  • API 키
  • 데이터베이스 연결 문자열
  • 비밀번호 및 기타 자격 증명
  • 암호화 키
  • 개인 설정

이러한 민감한 환경 변수가 적절히 보호되지 않으면 공격자에게 노출되어 데이터 유출, 무단 액세스 및 기타 보안 위험이 발생할 수 있습니다.

민감한 데이터 저장 및 관리를 위한 모범 사례

Docker 에서 민감한 환경 변수를 보호하려면 다음 모범 사례를 고려하십시오.

  1. 환경 변수 암호화: docker secret 또는 타사 비밀 관리 서비스와 같은 도구를 사용하여 민감한 환경 변수를 암호화하고 저장하여 평문으로 저장되지 않도록 합니다.

  2. 비밀 관리 서비스: AWS Secrets Manager, Azure Key Vault 또는 HashiCorp Vault 와 같은 전용 비밀 관리 서비스를 Docker 기반 애플리케이션과 통합하여 민감한 환경 변수를 안전하게 저장하고 검색합니다.

  3. 환경 변수 치환: 민감한 값이 환경 변수에 저장되는 대신 런타임에 채워지는 플레이스홀더로 바뀌는 환경 변수 치환 기술을 활용합니다.

  4. 최소 권한 액세스: 권한을 엄격하게 제어하여 인증된 직원 또는 프로세스만 민감한 환경 변수에 액세스하고 사용할 수 있도록 합니다.

  5. 감사 및 모니터링: 민감한 환경 변수 사용을 정기적으로 모니터링하고 감사하여 의심스러운 활동이나 무단 액세스 시도를 감지합니다.

  6. 안전한 저장 및 전송: 암호화, 안전한 프로토콜 및 기타 보안 조치를 사용하여 민감한 환경 변수를 안전하게 저장하고 전송합니다.

안전한 환경 변수 관리 구현

구체적인 요구 사항과 인프라에서 사용 가능한 도구 및 서비스에 따라 다양한 방법을 사용하여 안전한 환경 변수 관리를 구현할 수 있습니다. Docker 시크릿을 사용하여 민감한 환경 변수를 보호하는 방법의 예는 다음과 같습니다.

## 시크릿 생성
echo "my_secret_password" | docker secret create my-secret -

## Docker Compose 서비스에서 시크릿 사용
version: '3.8'
services:
web:
image: my-web-app
environment:
- DB_PASSWORD_FILE=/run/secrets/my-secret
secrets:
- my-secret
secrets:
my-secret:
external: true

이 예제에서 민감한 DB_PASSWORD 환경 변수는 Docker 시크릿으로 저장되며, 런타임에 web 서비스에서 안전하게 액세스할 수 있습니다.

Docker 에서 환경 변수를 관리하기 위한 이러한 안전한 관행을 구현함으로써 민감한 정보를 효과적으로 보호하고 컨테이너화된 애플리케이션의 전반적인 보안을 확보할 수 있습니다.

Docker 에서 환경 변수 관리를 위한 모범 사례

Docker 에서 환경 변수를 사용할 때는 유지 관리성, 확장성 및 보안을 보장하기 위해 모범 사례를 따르는 것이 중요합니다. 이 섹션에서는 Docker 기반 애플리케이션에서 환경 변수를 효과적으로 관리하기 위한 몇 가지 주요 권장 사항을 살펴봅니다.

환경 변수 구성 및 구조

  • 이름 규칙: 관련 변수를 그룹화하기 위해 접두사 (예: APP_, DB_, API_) 를 사용하는 등 환경 변수에 대한 명확하고 일관된 이름 규칙을 설정합니다.
  • 그룹화 및 분류: 환경 변수를 목적 또는 연결된 구성 요소에 따라 구성하여 관리 및 이해를 용이하게 합니다.
  • 관심사 분리: 민감도, 배포 환경 또는 애플리케이션 특정 요구 사항에 따라 환경 변수를 분리하여 명확한 관심사 분리를 보장합니다.

환경 변수 모범 사례 구현

  • 하드코딩 방지: 애플리케이션 코드에 민감하거나 구성 가능한 값을 직접 하드코딩하지 마십시오. 대신 환경 변수를 사용하여 애플리케이션을 더 유연하고 유지 관리 가능하게 만듭니다.
  • 합리적인 기본값 제공: 모든 변수를 명시적으로 설정할 필요 없이 애플리케이션을 실행하기 쉽도록 Dockerfile 또는 Docker Compose 구성에서 환경 변수에 대한 기본값을 정의합니다.
  • 문서화 및 의사소통: 환경 변수의 목적과 예상 값을 명확하게 문서화하여 다른 개발자가 Docker 기반 애플리케이션을 이해하고 작업하기 쉽게 만듭니다.
  • 자동화된 관리: 환경 변수의 생성, 업데이트 및 Docker 빌드 및 배포 프로세스에 주입과 같은 관리를 자동화하기 위해 도구 및 스크립트를 활용합니다.

배포 환경 전반의 환경 변수 관리

  • 환경별 구성: 서로 다른 배포 환경 (예: 개발, 스테이징, 프로덕션) 간의 전환을 쉽게 하도록 환경 변수에 대한 환경별 구성을 유지합니다.
  • 환경 변수 치환: ${VARIABLE} 구문과 같은 환경 변수 치환 기술을 사용하여 Docker 구성을 더욱 포터블하고 다양한 환경에 적응 가능하게 만듭니다.
  • 중앙 집중식 구성 관리: Git 저장소 또는 전용 구성 관리 도구와 같은 중앙 집중식 구성 관리 시스템을 사용하여 여러 환경에서 환경 변수를 저장하고 관리하는 것을 고려합니다.

환경 변수 모니터링 및 감사

  • 로그 및 모니터링: 특히 민감한 환경 변수의 사용을 추적하여 비정상적이거나 의심스러운 활동을 감지하기 위해 로깅 및 모니터링 메커니즘을 구현합니다.
  • 감사 및 규정 준수: 데이터 보호법이나 업계별 표준과 같은 보안 정책 및 규정 준수를 보장하기 위해 환경 변수 사용을 정기적으로 감사합니다.

Docker 에서 환경 변수를 관리하기 위한 이러한 모범 사례를 따름으로써 컨테이너화된 애플리케이션을 더욱 유지 관리 가능하고 확장 가능하며 안전하게 만들어 최종적으로 Docker 기반 인프라의 전반적인 품질과 신뢰성을 향상시킬 수 있습니다.

요약

이 튜토리얼을 마치면 Docker 컨테이너에 환경 변수를 전달하고 Docker Compose 구성에서 사용하며, 민감한 환경 변수를 관리하기 위한 안전한 관행을 구현하는 방법에 대한 포괄적인 이해를 얻게 됩니다. Docker 기반 애플리케이션에서 환경 변수를 효과적으로 관리하는 데 필요한 기술을 갖추게 되어 애플리케이션을 더욱 구성 가능하고, 이식 가능하며, 안전하게 만들 수 있습니다.