2016-08-04 110 views
2

我有一個nodejs項目引用了我編寫並由私人github回購託管的模塊。在的package.json依賴是這個樣子:Nodejs私有模塊和Docker容器

"dependencies": { 
    ... other stuff ... 
    "my_module": "git+https://github.com/me/mymodule.git", 
} 

這很好,但我想爲應用程序創建一個泊塢容器,但我不想在容器內的git。我知道我可以通過私有的npm repos託管,但我很想找到一種方法讓構建過程將源代碼(包括該模塊)拉出來,然後將其複製到容器中。

我很好,在容器中做一個npm安裝,但它不會喜歡git依賴。或者,我不想在生成機器上執行npm install,因爲我想要自由選擇任何我想要的容器......我不希望生成機器將windows二進制文件拖到mongo模塊,例如,並將其複製到我的debian容器中。

我考慮過的一個選擇是在devDependencies中放置依賴項「my_module」,然後在Docker容器中執行「npm install --production」,然後複製一個模塊。這只是與devDependencies的意圖不一致。

任何更好/推薦的解決方案?如果有更好的方法,我可以不用在github中託管這個模塊(但是我在一些只對這個客戶端有意義的項目上使用它)。

回答

3

這是一個非常簡單的解決方案。構建節點應用

npm install

然後在你的dockerfile包括COPY指令,告訴它的節點項目,其中安裝目錄,並在您希望它複製到。

編輯:

爲了應對@angelok你應該使用NPM一旦它複製到泊塢窗圖像重建,使其具有正確的依賴相對多克爾圖像的OS構建的,而不是帶出來的問題最初安裝節點包的OS。請參閱重建文檔here

+0

這就是我正在建議的。您可以在容器外部構建項目,而不是將它放在那裏。雖然它對你用來構建這些容器的主機適用了一些要求(如擁有git和npm) –

+0

對,它存在於某個地方。如果不在碼頭集裝箱中,則比在建造集裝箱的系統中。如果你從家裏部署,或者你的jenkins /竹子/雲中的任何服務器,這可能只是你的本地計算機。 :) –

+0

是的,但請記住,如果您從構建服務器執行npm install,則可以爲* that * os製作二進制文件。例如,如果它是windows,那麼它可能會在win32上編譯C庫,然後你將它們複製到一個linux容器中,它不起作用,對吧?我們在這裏做的假設是,所有的操作系​​統都是相同的,而他們不是。 – angelok