10

Docker에서 내 머리를 감싸려고하고 있지만 생각하기가 힘듭니다. 내 작은 프로젝트 (MERN 스택)에서 구현하려고했는데 개발, 어쩌면 준비 작업 및 프로덕션 환경에서 어떻게 구별 할 수 있을지 생각했습니다.Docker 다중 환경

두 개의 Docker 파일과 두 개의 Docker-compose 파일 (하나의 env에 대해 각 쌍이 있으므로 Dockerfile + docker-compose.yml for prod, Dockerfile-dev + docker-compose-dev)을 하나 보았습니다. yml for dev).

그러나 이것은 나에게 과도한 잔인한 것처럼 보입니다. 나는 그것을 두 개의 파일로만 갖고 싶어한다.

또한 문제 중 하나는 예를 들어. 개발을 위해 전 세계적으로 nodemon을 설치하려고하지만 poduction에는 설치하지 않습니다. 당신이 고정 표시기에 대한 나의 오해의 일부를 잡은 그래서 만약 완벽한 솔루션에서

나는, 나는 아직도 완전히 고정 표시기를하지 않는 것을 명심

docker-compose -e ENV=dev build 
docker-compose -e ENV=dev up 

같은 것을 실행 상상, 당신은 그 (것)들을 지적 할 수 .

답변

11

당신은 몇 가지 단서를 취할 수있다 "Using Compose in production"

당신은 거의 확실하게 실제 환경에 더 적합한 앱 구성을 변경 할 수 있습니다. 이러한 변화는 포함한다 : 그 코드는 컨테이너 내부에 유지와 외부

  • 호스트
  • 환경 변수 설정에 다른 포트에 바인딩에서 변경 될 수 없도록

    • 는 응용 프로그램 코드에 대한 볼륨 바인딩을 제거 다른 (예, 로그의 상세를 감소 또는 보내는 이메일을 사용하려면) 다시 시작 정책을 지정
    • (예를 들어, 재시작 : 항상이) 중단
    • (예, 로그 수집기를) 추가 서비스를 추가 피하기 위해
    • 생산에 적합한 지정 production.yml

      이러한 이유로

      , 당신은 아마 추가로 작성 파일을 정의 할 수 있습니다, :3210

  • 조언은 당신이 언급 예와 매우 유사하지 않다 구성. 이 구성 파일은 원래 작성 파일에서 변경하려는 내용 만 포함하면됩니다.

    docker-compose -f docker-compose.yml -f production.yml up -d 
    

    overriding mechanism 시도하고 하나를 선택하기 위해 환경 변수를 하나 개의 작성 파일에 dev에와 자극의 논리를 믹스하는 것보다 낫다.

    참고 : 두 번째 도커 파일 이름을 docker-compose.override.yml으로하면 간단합니다. docker-compose up은 자동으로 재정의를 읽습니다.
    하지만 귀하의 경우 환경에 기반한 이름이 명확합니다.

    +0

    굉장, 설명해 주셔서 감사합니다! –

    2

    Docker Compose는 기본적으로 docker-compose.ymldocker-compose.override.yml으로 읽습니다.Understanding-Multiple-Compose-Files

    기본값 인 docker-compose.yml과 다른 덮어 쓰기 작성 파일을 설정할 수 있습니다. 예 : docker-compose.prod.ymldocker-compose.test.yml. 같은 장소에 보관하십시오.

    그런 다음 각 env에 대해 docker-compose.override.yml이라는 심볼릭 링크를 만듭니다.
    docker-compose.{env}.yml 파일을 추적하고 docker-compose.override.yml.gitignore에 추가하십시오. 찌르다 ENV에서
    : ln -s ./docker-compose.prod.yml ./docker-compose.override.yml
    테스트 ENV에서 : ln -s ./docker-compose.test.yml ./docker-compose.override.yml
    프로젝트 구조는 다음과 같이 표시됩니다 :

    project\ 
        - docker-compose.yml  # tracked 
        - docker-compose.prod.yml # tracked 
        - docker-compose.test.yml # tracked 
        - docker-compose.override.yml # ignored 
          #linked to override composefile for current env 
        - src/ 
        - ... 
    

    는 그런 짓을 한거야. 각 환경에서 같은 명령으로 작성 파일을 사용할 수 있습니다. docker-compose up

    확실하지 않은 경우 docker-compose config을 사용하여 올바르게 재정의되었는지 확인하십시오.

    관련 문제