소개
이 튜토리얼에서는 Docker Compose 에서 환경 변수의 중요성과 사용법에 대해 안내합니다. Docker 기반 애플리케이션을 구성하기 위해 환경 변수를 정의하고 활용하는 방법을 배우고, 더욱 유연하고 유지 관리 가능한 배포 프로세스를 확보할 수 있습니다. 이 문서를 마치면 Docker Compose 에서 환경 변수의 역할과 효과적인 적용 방법에 대한 확실한 이해를 얻게 될 것입니다.
이 튜토리얼에서는 Docker Compose 에서 환경 변수의 중요성과 사용법에 대해 안내합니다. Docker 기반 애플리케이션을 구성하기 위해 환경 변수를 정의하고 활용하는 방법을 배우고, 더욱 유연하고 유지 관리 가능한 배포 프로세스를 확보할 수 있습니다. 이 문서를 마치면 Docker Compose 에서 환경 변수의 역할과 효과적인 적용 방법에 대한 확실한 이해를 얻게 될 것입니다.
Docker Compose 는 다중 컨테이너 애플리케이션을 정의하고 관리하는 강력한 도구입니다. Docker Compose 의 주요 기능 중 하나는 애플리케이션 동작을 구성하고 사용자 지정하는 데 환경 변수를 사용할 수 있다는 것입니다. 환경 변수는 Docker Compose 에서 중요한 역할을 수행하며, 애플리케이션 코드에서 구성을 분리하여 더욱 포터블하고 관리하기 쉽게 만들어줍니다.
환경 변수는 애플리케이션이 실행될 때 사용할 수 있는 키 - 값 쌍의 집합입니다. 애플리케이션이 정상적으로 작동하는 데 필요한 구성 설정, 민감한 정보 및 기타 데이터를 저장하고 액세스하는 방법을 제공합니다.
Docker Compose 의 맥락에서 환경 변수는 서비스 수준에서 정의될 수 있으며, 이를 통해 애플리케이션 내 개별 컨테이너의 동작을 사용자 지정할 수 있습니다. 이러한 유연성을 통해 개발, 스테이징 및 프로덕션과 같은 다양한 환경에 애플리케이션을 쉽게 적응시킬 수 있으며, 애플리케이션 코드를 수정할 필요가 없습니다.
Docker Compose 파일에서 환경 변수를 정의하려면 environment 또는 env_file 키워드를 사용할 수 있습니다. environment 키워드는 Compose 파일 내에서 직접 환경 변수를 정의하는 데 사용되며, env_file 키워드는 환경 변수가 포함된 파일을 지정하는 데 사용됩니다.
environment 키워드를 사용하여 환경 변수를 정의하는 예는 다음과 같습니다.
version: "3"
services:
web:
image: my-web-app
environment:
- DB_HOST=database
- DB_USER=myuser
- DB_PASSWORD=secretpassword
이 예제에서 web 서비스에는 DB_HOST, DB_USER, DB_PASSWORD의 세 가지 환경 변수가 정의되어 있습니다.
또는 env_file 키워드를 사용하여 환경 변수가 포함된 파일을 지정할 수 있습니다.
version: "3"
services:
web:
image: my-web-app
env_file:
- web-app.env
이 경우 환경 변수는 web-app.env라는 파일에 정의되어 있으며, 다음과 같을 수 있습니다.
DB_HOST=database
DB_USER=myuser
DB_PASSWORD=secretpassword
두 가지 방법 모두 유효하며, 환경 변수의 복잡성과 사용자의 선호도에 따라 상호 교환적으로 사용할 수 있습니다.
Docker Compose 파일에서 환경 변수를 정의하면 애플리케이션은 프로그래밍 언어 또는 프레임워크에 적합한 메커니즘을 사용하여 이러한 변수에 액세스할 수 있습니다. 예를 들어, Node.js 애플리케이션에서는 process.env 객체를 사용하여 환경 변수에 액세스할 수 있습니다.
const dbHost = process.env.DB_HOST;
const dbUser = process.env.DB_USER;
const dbPassword = process.env.DB_PASSWORD;
마찬가지로, Python 애플리케이션에서는 os.environ 모듈을 사용하여 환경 변수에 액세스할 수 있습니다.
import os
db_host = os.environ.get('DB_HOST')
db_user = os.environ.get('DB_USER')
db_password = os.environ.get('DB_PASSWORD')
환경 변수를 사용하면 애플리케이션의 구성을 코드와 분리하여 더욱 유연하고 관리하기 쉽게 만들 수 있습니다.
앞서 언급했듯이, Docker Compose 파일에서 environment 또는 env_file 키워드를 사용하여 환경 변수를 정의할 수 있습니다. 이러한 옵션을 자세히 살펴보겠습니다.
environment 키워드 사용environment 키워드를 사용하면 Compose 파일 내에서 직접 환경 변수를 정의할 수 있습니다. 예제는 다음과 같습니다.
version: "3"
services:
web:
image: my-web-app
environment:
- DB_HOST=database
- DB_USER=myuser
- DB_PASSWORD=secretpassword
이 예제에서 web 서비스에는 DB_HOST, DB_USER, DB_PASSWORD의 세 가지 환경 변수가 정의되어 있습니다.
env_file 키워드 사용또는 env_file 키워드를 사용하여 환경 변수가 포함된 파일을 지정할 수 있습니다. 많은 환경 변수를 가질 때 또는 Compose 파일과 분리하여 관리하고 싶을 때 유용합니다.
version: "3"
services:
web:
image: my-web-app
env_file:
- web-app.env
이 경우 환경 변수는 web-app.env라는 파일에 정의되어 있으며, 다음과 같을 수 있습니다.
DB_HOST=database
DB_USER=myuser
DB_PASSWORD=secretpassword
Docker Compose 파일에서 환경 변수를 정의하면 애플리케이션은 프로그래밍 언어 또는 프레임워크에 맞는 메커니즘을 사용하여 이러한 변수에 액세스할 수 있습니다.
Node.js 애플리케이션에서 환경 변수에 액세스하는 예는 다음과 같습니다.
const dbHost = process.env.DB_HOST;
const dbUser = process.env.DB_USER;
const dbPassword = process.env.DB_PASSWORD;
그리고 Python 애플리케이션에서는 다음과 같습니다.
import os
db_host = os.environ.get('DB_HOST')
db_user = os.environ.get('DB_USER')
db_password = os.environ.get('DB_PASSWORD')
환경 변수를 사용하면 애플리케이션의 구성을 코드와 분리하여 더욱 유연하고 관리하기 쉽게 만들 수 있습니다.
Docker Compose 에서 환경 변수를 사용하는 주요 이점 중 하나는 애플리케이션 코드에서 구성을 분리할 수 있다는 것입니다. 이러한 분리는 애플리케이션을 더욱 포터블하고 유지 관리 가능하며 관리하기 쉽게 만듭니다.
구성 설정을 환경 변수에 저장함으로써 개발, 스테이징 및 프로덕션과 같은 다양한 환경에 애플리케이션을 쉽게 적응시킬 수 있으며, 애플리케이션 코드를 수정할 필요가 없습니다. 이 접근 방식은 데이터베이스 자격 증명이나 API 키와 같은 민감한 정보가 애플리케이션에 직접 하드코딩되지 않도록 하는 데에도 도움이 됩니다.
데이터베이스에 연결해야 하는 웹 애플리케이션의 예를 살펴보겠습니다. 환경 변수를 사용하여 다양한 환경에 대한 데이터베이스 연결 설정을 구성할 수 있습니다.
다음과 같은 Docker Compose 파일이 있다고 가정합니다.
version: "3"
services:
web:
image: my-web-app
environment:
- DB_HOST=${DB_HOST}
- DB_USER=${DB_USER}
- DB_PASSWORD=${DB_PASSWORD}
database:
image: postgres
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
이 예제에서 web 및 database 서비스는 각각의 설정을 구성하기 위해 환경 변수를 사용합니다. DB_HOST, DB_USER, DB_PASSWORD, DB_NAME 변수는 Compose 파일 내에서 정의되지 않고 Compose 파일이 실행되는 환경에서 정의됩니다.
다양한 환경에서 애플리케이션을 실행하려면 별도의 환경 변수 파일을 만들거나 셸에서 직접 변수를 설정할 수 있습니다. 예를 들어 다음과 같은 환경 변수 파일이 있을 수 있습니다.
development.env
DB_HOST=localhost
DB_USER=myuser
DB_PASSWORD=devpassword
DB_NAME=myapp_dev
production.env
DB_HOST=production-db.example.com
DB_USER=produser
DB_PASSWORD=prodpassword
DB_NAME=myapp_prod
그런 다음 Docker Compose 명령을 실행할 때 적절한 환경 변수 파일을 사용할 수 있습니다.
## 개발 환경에서 실행
docker-compose --env-file=development.env up -d
## 프로덕션 환경에서 실행
docker-compose --env-file=production.env up -d
애플리케이션을 구성하는 데 환경 변수를 사용하면 Compose 파일이나 애플리케이션 코드를 수정하지 않고도 다양한 환경에 쉽게 적응시킬 수 있습니다.
Docker Compose 에서 환경 변수를 사용할 때는 다음과 같은 권장 사항을 따르는 것이 중요합니다.
이러한 권장 사항을 따르면 Docker Compose 기반 애플리케이션의 구성을 효과적으로 관리하는 데 환경 변수를 사용할 수 있습니다.
이 튜토리얼에서는 Docker Compose 에서 환경 변수의 역할을 살펴보았습니다. Docker 기반 애플리케이션을 구성하는 데 환경 변수를 정의하고 사용하는 방법을 배워, 더욱 유연하고 적응력 있는 배포 프로세스를 확보했습니다. 환경 변수를 활용하여 데이터베이스 연결 문자열, API 키 및 기타 민감한 정보와 같은 다양한 구성을 쉽게 관리할 수 있으며, Docker Compose 파일 내에 직접 하드코딩하지 않아도 됩니다. Docker Compose 에서 환경 변수의 힘을 이해하는 것은 강력하고 확장 가능하며 유지 관리 가능한 Docker 기반 애플리케이션을 구축하고 유지 관리하는 데 필수적인 기술입니다.