Dev

Docker compose - .env 활용하기

foxlee 2022. 2. 8. 21:11

* 프로젝트 개발 환경에 따른 변수를 .env에서 선언하고 Docker compose 안에서 참조하거나 각 서비스(API, Web Server 등)에 변수를 전달해서 환경 변수로 활용하자.

./.env
FLASK=project_api
FLASK_PORT=11234
PROXY=project_proxy
PROXY_PORT=11235
REDIS=project_redis
REDIS_PORT=6379
REDIS_PASSWORD=password

# API 에서 전달될 환경 변수 
DB_URL='URL_0101'

./docker-compose.yml
version: "3"

services:
  flask:
    container_name: "${FLASK}"
    restart: always
    build: ./flask
    volumes:
      - ./flask/logs:/usr/src/flask_app/logs
    expose:
      - "${FLASK_PORT}"
    env_file:
      - ./.env # 다른 변수들이 컨테이너 안 os.getenv("DB_URL") 전달됨
    command: gunicorn -c ./gunicorn.conf.py "app:create_app('prod')"
    depends_on:
      - redis # 컨테이너 이름이 아닌 여기서 서비스로 지정한 이름(여기는 nginx 또는 redis)

  nginx:
    container_name: "${PROXY}"
    restart: always
    build: ./nginx
    volumes:
      - ./nginx/log:/var/log/nginx
    ports:
      - "${PROXY_PORT}:80"
    depends_on:
      - flask

  redis:
    image: redis:4.0.11-alpine
    container_name: "${REDIS}"
    command: "redis-server --requirepass ${REDIS_PASSWORD}"
    ports:
      - "${REDIS_PORT}"