2016-09-21 763 views
2

我已經建立了一個docker django容器,並使用build here構建了其圖像。本教程演示瞭如何創建一個基本的django應用程序,並將應用程序安裝到「/ code」,據我瞭解,它包含在一個數據卷中。在Docker容器中更新代碼

但是我想了解,我將如何能夠更新和開發此代碼,並能夠發佈/部署它。由於當我提交時,它不會考慮代碼中的任何更改,因爲它是數據卷的一部分。

有沒有什麼辦法讓django代碼成爲圖像的一部分,或者用更新的代碼更新圖像?

+1

您只需將Python源代碼添加到已安裝相應python依賴項的容器中即可。並保持該容器的'ENTRYPOINT'爲'[「python」,「/path/to/my.py」]'。建立碼頭圖像是你的CI系統根據規則完成的事情,例如只在標籤上或僅從主機等等。 – activatedgeek

+0

如何在容器中添加源代碼而不是在數據卷中? – bilalba

+0

一般工作流程有一個單獨的'Dockerfile.development'和'Dockerfile'(用於生產)。卷正在開發中,但生產dockerfile沒有卷指令(在你的情況下它不是必需的)。只需簡單地做一個'ADD。/code'。沒有卷。 – activatedgeek

回答

-1

tutorial的步驟9中,您設置了一個卷。本卷將鏈接您的當前目錄和您的容器目錄。換句話說,他們將是一樣的。

因此,對本地文件的任何更新都會更改容器中的文件。請記住,您將需要重新啓動您的應用程序,以便進行更改。

在部署圖像之前,您需要創建第二個docker撰寫文件。該文件將刪除該卷,以便代碼將保留在容器內,並且不會從外部更改。您可以按照docker compose documentation中提供的步驟操作。

+0

當我更改/ code中的文件時,它們顯示在本地Web應用程序中,但是當我推送容器圖像並部署它時,它不包含更改。 – bilalba

+0

我認爲音量選項可能是問題所在。當你推動你的容器並運行它時,音量仍然可以工作,但不會再使用本地文件。請務必更新您正在部署的代碼。 另一種替代方法是刪除音量。這樣,每次更新代碼時都需要重新構建映像。 – alejdg

+0

這就是我要求的。如何更新我部署的代碼? – bilalba

0

當你想更新的圖像,可以說由於你的應用程序代碼的更改,您將圖像生成過程中使用COPY,所以在Dockerfile你這樣做

COPY /you/code/on/the/host /var/www 

也看到了我對答案「卷」和圖像編譯https://stackoverflow.com/a/39314602/3625317,以闡明爲什麼您的代碼在構建中缺失