如何使用Docker设置单独的.env进行开发和生产

时间:2019-09-10 06:51:55

标签: docker docker-compose environment-variables

来自一个我在远程服务器中手动执行ssh,执行git pull并创建我的.env(因为它被gitignored)的环境中,如何分离开发.env和一个生产.env。我使用docker-machine创建了一个AWS EC2实例。我创建了production.yml,并做了docker-compose -f production.yml up -d。 EC2计算机中的容器接收了我所不需要的开发内容.env

Dockerfile

FROM python:3.6-alpine
ENV PYTHONUNBUFFERED 1

RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev git jpeg-dev zlib-dev libmagic
RUN python -m pip install --upgrade pip

RUN mkdir /writer-api
COPY requirements.txt /writer-api/
RUN pip install --no-cache-dir -r /writer-api/requirements.txt
COPY . /writer-api/
WORKDIR /writer-api

production.yml

version: "3"
services:
  postgres:
    restart: always
    image: postgres
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data/
  web:
    restart: always
    build: .
    command: gunicorn writer.wsgi:application -w 2 -b :8000
    environment:
      DEBUG: ${DEBUG}
      SECRET_KEY: ${SECRET_KEY}
      DB_HOST: ${DB_HOST}
      DB_NAME: ${DB_NAME}
      DB_USER: ${DB_USER}
      DB_PORT: ${DB_PORT}
      DB_PASSWORD: ${DB_PASSWORD}
      SENDGRID_API_KEY: ${SENDGRID_API_KEY}
      AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
      AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
      AWS_STORAGE_BUCKET_NAME: ${AWS_STORAGE_BUCKET_NAME}
    depends_on:
      - postgres
      - redis
    expose:
      - "8000"
  redis:
    restart: always
    image: "redis:alpine"
  celery:
    restart: always
    build: .
    command: celery -A writer worker -l info
    volumes:
      - .:/writer-api
    depends_on:
      - postgres
      - redis
  celery-beat:
    restart: always
    build: .
    command: celery -A writer beat -l info
    volumes:
      - .:/writer-api
    depends_on:
      - postgres
      - redis
  nginx:
    restart: always
    build: ./nginx/
    ports:
      - "80:80"
    depends_on:
      - web
volumes:
  pgdata:

2 个答案:

答案 0 :(得分:4)

我想您可以导出环境外壳变量,然后根据环境使用.env。在工作空间中创建一个dev.envprod.env文件。

样本撰写-

version: '3'

services:
  nginx:
    image: nginx
    ports:
      - '80'
    env_file:
      - ${ENVIRON}.env

为DEV构建-

export ENVIRON=dev
docker-compose up -d 

构建PROD-

export ENVIRON=prod
docker-compose up -d 

这样,您将能够为DEV&PROD环境利用相同的撰写文件。

答案 1 :(得分:0)

分别在单独的文件夹中设置composeproduction的{​​{1}}文件并将dev文件放入这些文件夹