2016-10-16 56 views
0

我使用https://hub.docker.com/r/tiangolo/uwsgi-nginx圖像碼頭化Python webapp,該圖像使用supervisor來控制uWSGI實例。集裝箱模式最佳實踐

我的應用程序實際上需要一個額外的主管介導的過程來運行(LibreOffice無頭,我通過appy模塊生成文檔),我在想什麼是實現它的正確模式。

我看到它的方式,我可以用額外的超級用戶配置爲我的需要(以及所有必要的操作系統級別的安裝步驟)擴展上面的圖像,但這與運行的一般原則相矛盾給定容器中最少量的不同進程。但是,由於我的Python應用程序只能在本地與LibreOffice進行交流,所以我不確定如何以更集裝箱的方式實現它。感謝您的任何幫助或建議。

+0

LibreOffice交互做什麼? – R0MANARMY

+0

@ R0MANARMY它使用'appy'模塊生成文檔(我編輯了我的問題)。 – cjauvin

回答

1

您已經吹噓「每個容器一個進程」 - 只需添加另一個進程即可。這不是一個硬性的規則,甚至是每個人都同意的規則。

延伸離開,或更好地創作您自己的自定義容器。這種方式你擁有它,你瞭解它,併爲你的目的進行了優化。

2

對每個容器一個進程的建議是合理的 - Docker只監視容器運行時啓動的進程,因此如果有多個進程,Docker不會監視它們。這也是一個更好的設計 - 您擁有輕量級,專注於單個職責的容器,並且可以獨立管理它們。

user2105103沒錯,您使用的圖像已經失去了它的好處,因爲它運行Python和Nginx,並且您可以使用LibreOffice無頭擴展它,並在不更改代碼的情況下打包整個應用程序。

如果你到一個更「最佳實踐」的方式,你有一個分佈式應用程序的多克網絡遍佈三個容器運行:

  • nginx - Web代理,這是大衆切入點應用程序。 Nginx可以做路由,緩存,SSL終止,速率限制等。
  • app - 您的Python應用程序,只在Docker網絡中可見。接收來自nginx的請求並使用libreoffice進行文檔操作;
  • libreoffice - 以暴露API的無頭模式運行,但只在Docker網絡中可用。

您需要對此進行代碼更改,使PyOO等東西能夠從應用程序容器遠程使用LibreOffice API。

+0

FWIW,Yelp爲容器中的2個進程提供了一個[相當不錯的案例](https://engineeringblog.yelp.com/2016/01/dumb-init-an-init-for-docker.html),但僅限於其中之一是「真正的工作」。 – R0MANARMY