2014-11-26 2 views
5

Clojure를 사용하여 웹 애플리케이션을 개발하기 위해 Docker를 시작하려고하고 있으며 어떤 방법을 사용해야할지 모르겠습니다.Clojure webapp for Docker 개발 워크 플로우

  • 전화 lein ring server (대화 형 또는 Dockerfile에서 CMD) 또는
  • 응용 프로그램을 컴파일하는 Dockerfile을 사용 : 내가 지금까지 읽어도 the offical Docker Clojure repo보고 한 바로는, 기본적으로 두 가지 방법이있다 uberjar에 넣고 java -jar을 결과 jar 파일의 CMD으로 사용하십시오.

전자는 dev에 환경이 우리가 아마 하나가 엄격 않을 것 물건을 추가, :dev leiningen 프로파일을 사용하고 있는지 주어, 프로덕션 환경에 최대한 가까이하지 않다는 점에서 문제가 될 나에게 보인다 프로덕션 환경에서 원하는 도구 및 정보 (예 : 노출 된 프로덕션 서버의 코드)는 항상 좋은 아이디어입니다. 그러나 후자는 정반대의 문제인 것처럼 보입니다. 이제는 모든 변경 작업이 기본적으로 이미지 재구성이 필요합니다 (편집 - 컴파일 실행주기를 생각하십시오). 따라서 수정 기능에 대해 lein ring의 멋진 컴파일을 잃게됩니다.

실제로 이러한 조합을 사용하는 사람들은 무엇입니까?

추신 : 실제로 다른 운영 모드가있을 수 있습니다 (예 : Immutant 또는 Tomcat을 배포 대상으로 사용하거나 Hudson과 같은 CI 서버 사용). 가장 기본적인 설정에 대해 먼저 묻습니다.

답변

1

우리 팀과 저는 배포시 움직이는 부품 수를 개발하고 최소화하면서 신속한 피드백을 최적화하기로했습니다. 결과적으로 우리는 lein ring server을 개발에 사용하기로 선택했으며 배포를 위해 uberjar를 출하하기로 선택했습니다. 나는 도커 컨테이너에서 실행되는 코드를 사용하여이 작업을 수행했습니다.

최대한 빨리 코드를 변경 한 결과를 볼 수 없었던 개발 워크 플로로 돌아가고 싶지 않습니다. 내 생각에, 신속한 피드백은 로컬 시스템과 프로덕션간에 실행중인 서비스의 위험성을 약간 다르게합니다.

또한 몇 줄의 코드를 변경 한 다음 내 프로덕션 설정 (빌드 된 도커 이미지를 실행하거나 로컬로 uberjar를 빌드하는 것)에 훨씬 가깝게 실행되는 로컬 서비스를 시작하지 못하게합니다.

0

두 번째 옵션 java -jar ...을 사용하여 웹 응용 프로그램을 프로덕션 환경에 배포합니다 (아직 Docker를 사용하지 않음). 이렇게하면 편집 - 컴파일 실행주기가 만들어집니다. 그러나 나는 모든 변화에 대해 다시 컴파일하지 않습니다. 내가 출시 할 준비가되었을 때에 만 나는 uberjar를 만든다. CI 소스는 항상 권장됩니다.

1

Leiningen을 사용하여 프로덕션 모드에서 실행하는 것을 막을 수있는 방법은 없습니다. 그냥 사용 :

lein with-profile production ring server 

빠른 시작 시간을 제공하기 때문에 우리는 uberjar 방식으로 해결했지만 두 방법 모두 성공적으로 사용했습니다.