2016-01-24 23 views
1

我正在使用Django與Gunicorn守護進程和Nginx進行代理和靜態文件。我有一個非常簡單的面料腳本爲「自動」的一些行動:如何將Docker添加到Django + Gunicorn + Nginx + Fabric

  1. 我們上的virtualenv工作對我們的本地計算機
  2. 我們推只應用到我們的GitHub庫
  3. 我們ssh到服務器,並運行如果需要的面料腳本是在GitHub庫
  4. 這拉從GitHub,合併,重新啓動的Nginx和Gunicorn

。已經有這樣的問題,例如第一個部署,我需要克隆來來往往m手動使用GitHub。

現在,我們正處於一個階段,我們的應用程序將發送給我們的客戶,以便他們可以託管自己的服務器(我們可能需要在不久的將來擴展)。他們需要Docker容器部署在自己的服務器上。我將ssh連接到他們的服務器來更新我們的應用程序的部署。但是,我很難弄清楚什麼可能是自動執行此操作的最佳方式,即每次使用Fabric時都需要採取的操作順序。

+0

至少有一些教程用瓶子製作碼頭集裝箱。您應該創建一個'requirements.txt'文件,列出所有的依賴關係並將其包含在版本控制中。您不需要使用Fabric自動化很多,只需從git下載tarball,解壓縮它,然後運行'docker build',它將在docker容器中安裝nginx和您的依賴項。 https://開頭github上。com/atupal/dockerfile.flask-uwsgi-nginx – jumbopap

+0

你手動在第3步ssh?或者它是自動的? – dm03514

+0

@jumbopap感謝您的評論,我的要求已經在'requirements.txt'文件中。我的問題更多的是如何自動執行此操作,因爲我不想手動構建泊塢窗容器。我猜'Fabric'變得多餘了,因爲我可以從我的git倉庫中取出並在'Dockerfile'中安裝需求。 –

回答

3

我的建議是創建一個Dockerfile,並且在發佈分支的每次提交中都有一些持續集成服務器(Jenkins,CircleCI等)提取代碼,運行一組測試,然後構建併發佈一個新的Docker圖片。如果您需要付款,您可能希望它是私人的 - 這很容易做到,您可以設置私人碼頭註冊表。你甚至可能會發現這是一個比現有內部工作流程更好的工作流程,因爲它全部是自動化的。

這裏是您Dockerfile是什麼樣子的例子:

FROM debian:stable 
ADD . /code 
WORKDIR /code 
RUN apt-get update && apt-get install -y python-dev 
RUN pip install -r requirements.txt 
CMD python run.py 

這只是一個例子,我不知道你的代碼是如何組織的,但它假定Dockerfile被窺視與腳本,run.py,知道如何讓事情運行。它也假設你想要使用debian:stable - 這裏有很多選項,你需要選擇最適合你的東西。它還假定你有你的依賴組織在一個requirements.txt文件中。最後,我只是將apt-get放在那裏,以顯示如何運行任意命令並安裝python的開發工具。

根據結構腳本的複雜程度,Dockerfile可以完全替代它,或者也可以將結構腳本作爲Dockerfile中的一個步驟運行。

您可以找到有關Dockerfile格式這裏的更多信息:https://docs.docker.com/engine/reference/builder/

編輯:我要補充 - 顯然是有決策制定你需要做出關於您如何支持其在混合nginx的一點點,因爲典型的碼頭方式應該是將其作爲第二個圖像和容器 - 這很容易做到(在我看來,更好的體系結構並不像目前看起來那樣在一臺機器上擁有),但它需要一些注意。