2014-11-26 16 views
5

Próbuję zacząć pracę z Dockerem w celu opracowania aplikacji internetowej z Clojure i nie jestem pewien, w którą stronę pójść. Z tego co czytałem do tej pory, a także patrząc na the offical Docker Clojure repo, istnieją zasadniczo dwa sposoby:Przepływ pracy dla aplikacji webowej Clojure z Dockerem

  • połączeń lein ring server (interaktywnie lub jako CMD w Dockerfile) lub
  • użyć Dockerfile skompilować aplikację do pliku uberjar i użyj java -jar jako CMD w wynikowym pliku JAR.

Były wydaje mi się być problematyczne w tym sensie, że środowisko dev nie jest tak blisko, jak to możliwe, aby w środowisku produkcyjnym, biorąc pod uwagę, że jesteśmy prawdopodobnie przy użyciu profilu :dev Leiningen dodając rzeczy, że jeden nie będzie ściśle chcieć w produkcji (dostarczając jak najmniej narzędzi i "informacji", tzn. kod na wyeksponowanym serwerze produkcyjnym jest zawsze dobrym pomysłem). Wydaje się jednak, że ten drugi problem jest dokładnie odwrotny: teraz każda zmiana wymaga w zasadzie przebudowania obrazu (pomyśl o cyklu edycji-kompilacji), więc straciłbyś przyjemną kompilację podczas modyfikacji.

W jaki sposób ludzie stosują tę kombinację w praktyce?

PS: Jestem świadomy, że mogą istnieć inne tryby działania w praktyce (np. Użycie Immutant lub Tomcat jako celu wdrożenia lub użycie serwera CI takiego jak Hudson itp.). Pytam najpierw o najbardziej podstawową konfigurację.

Odpowiedz

1

Mój zespół i ja zdecydowaliśmy się zoptymalizować szybkie opinie, jednocześnie rozwijając i minimalizując liczbę ruchomych części w naszych wdrożeniach. W związku z tym zdecydowaliśmy się na opracowanie wersji lein ring server i wysyłamy uberjar do naszego wdrożenia. Zrobiłem to z kodem uruchomionym w kontenerach doków i bez nich.

Nie chciałbym wracać do korzystania z przepływu pracy, który nie umożliwił jak najszybszego obejrzenia wyników zmiany kodu. Moim zdaniem, szybkie sprzężenie znacznie przewyższa ryzyko, że uruchomione usługi nieco różnią się między moją maszyną lokalną a produkcją.

Nic nie powstrzyma mnie przed zmianą kilku linii kodu, a następnie uruchomieniem usługi lokalnej, która działa znacznie bliżej mojej konfiguracji produkcyjnej (albo działający obraz budowanego dokera, albo lokalnie uberjar).

0

Używam drugiej opcji java -jar ..., aby wdrożyć moją aplikację internetową do produkcji (nie używając jeszcze Docker). Tworzy to cykl edytowania-kompilacji, jak powiedziałeś. Ale nie rekompiluję za każdą zmianę. Dopiero gdy będę gotowy do wydania, tworzę uberjar. Oczywiście zawsze polecam CI.

1

Nic nie powstrzyma cię od uruchomienia w trybie produkcyjnym z Leiningen. Po prostu użyj:

lein with-profile production ring server 

Z powodzeniem zastosowałem oba podejścia, chociaż zdecydowaliśmy się na podejście uberjar, ponieważ zapewnia on szybsze uruchamianie.

Powiązane problemy