2014-01-13 48 views
3

我們正在嘗試創建一個Docker容器,它將託管並運行我們的webapp(主要使用Symfony2以PHP編寫)。使用Docker構建和運行開發環境

目前,容器嵌入所有應用程序代碼,在構建映像時克隆(通過Dockerfile)。該應用程序可以在OSX上通過Vagrant(Precise64基本映像)正確運行。 我們正在努力與主機(Vagrant - > OSX)共享容器嵌入代碼用於開發目的(編輯OSX主機上的文件應該影響容器代碼)。 似乎沒有辦法將此文件夾從容器共享到主機。 從主機共享一個文件夾到容器(run命令的-v選項)會覆蓋原始容器文件夾。 由於主機(Vagrant和OSX)無法讀取原始位置,因此軟鏈接無法正常工作。

我確信解決方案是與Docker的卷(http://docs.docker.io/en/latest/use/working_with_volumes/),但我們還沒有想出如何使它工作。

您對此有何反饋/有經驗?

+0

我已經編寫了關於將您的開發環境放在泊塢窗上的指南。碼頭標準有點老,所以可能會有不符合最佳實踐的地方。 [請點擊此處](http://play.thinkcube.com/development-environment-on-docker)。 – chanux

回答

3

你可以分享你的OSX文件容器中的以下行:

OSX dir(host) -shared fold-> /vagrant(vagrant) -volume-> container dir(container) 

,但該文件保存在你的主機沒有容器。

如果要將文件保存在容器中並將其共享到OSX主機,則所有容器文件位於/ var/lib/docker/aufs/mnt/{container id}中的aufs目錄中,您可以共享此文件通過由流浪者或其他人支持的羽毛來摺疊OSX:

container dir(container) -aufs-> /var/lib/docker/aufs/mnt/{id}(vagrant) -some-> OSX dir(host) 
+0

第一個選項似乎是正確的恕我直言。在/ vagrant上共享文件夾,然後使用卷讓容器訪問這些文件。 –

+0

我想到了第一種解決方案,但是將代碼嵌入到容器中讓我可以構建一個即可使用的映像,而無需首先克隆repo,執行init腳本(如數據庫,取決於應用程序代碼)等。 –

+0

這種方法與其他方式相同。將代碼嵌入到容器中(使用Dockerfile和RUN在構建過程中克隆回購),然後將代碼克隆到的目錄公開到vagrant的/ vagrant目錄,然後您可以從主機訪問該目錄。 –