我的週末項目是探索Docker,我認爲一個簡單的node.js項目會很好。通過「實時編輯」,我的意思是我希望能夠在我的主機系統上操作文件,並且(儘可能少的努力)看到Docker容器立即反映這些更改。如何獲取node.js「實時編輯」與Docker配合使用
Dockerizing a Node.js web app進展順利,然後谷歌搜索和thrashing開始。我想,我現在瞭解以下內容:
如果我使用
ADD
方法的教程的NodeJS指出的,那麼我就可以不用現場編輯,因爲ADD
在docker build
(不docker run
)完全實現。如果我安裝節點項目的目錄的東西,如
-v `pwd`:/usr/src/app
,那麼它將無法運行,因爲無論node_modules
不存在(且體積不可用在構建時得到填充,因爲-v
是docker run
參數)或者我需要在主機的項目目錄中預先填充node_modules
,這只是不舒服,可能會遇到操作系統兼容性問題。
我這個瘋狂的新手顛簸可以提煉成三次嘗試,每次都有自己的缺點或明顯的失敗。
1)Node.js教程使用ADD
完美工作,但沒有「實時編輯」。我沒有期望這應該是我需要的,但它至少證明我有基本的佈線和運行。
FROM node:argon
# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Install app dependencies
COPY package.json /usr/src/app/
RUN npm install
# Bundle app source
COPY . /usr/src/app
EXPOSE 8080
CMD [ "npm", "start" ]
2)嘗試從Dockerfile構建全局節點依賴關係。這似乎不太酷,但合理(因爲我不希望經常改變依賴關係)。然而,它也根本沒有工作,這真的讓我感到驚訝。
FROM node:argon
RUN npm install -g express
WORKDIR /usr/src/app
# which will be added via `docker run -v...`
EXPOSE 8080
3)在建,ADD
只有package.json
到一個臨時位置,並得到node_modules
設置,然後移動到主機的項目目錄,然後用-v `pwd`:/usr/src/app
安裝項目的目錄。如果這可以工作,我會試圖添加nodemon
,理論上會有我想要的。在我看來,這是迄今爲止最聰明最常見的語言,但這根本行不通。我試圖修復一些東西,包括主機目錄權限,並沒有喜悅。
FROM node:argon
WORKDIR /usr/src/app
# Provides cached layer for node_modules
ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN cp -a /tmp/node_modules /usr/src/app/
EXPOSE 8080
我懷疑有不理解一些基本的概念,我的多個實例,但是當我搜索周圍好像有很多不同的方法,有時增加的項目需求複雜。我可能愚蠢地試圖保持簡單。 :)
統計:
- 運行在Mac OS 10.10
- 多克爾1.12.0-RC2-beta17(最新在寫作時)
- Kitematic 0.12.0(最遲在寫本新聞時)
- Node.js 4.4。7(最新的前6在寫作時)
UPDATE:試圖扯些什麼,我已經試過一起學習,我已經做了以下並且有更好的運氣。現在它建立,但docker run -v `pwd`:/usr/src/app -p 49160:8080 -d martink/node-docker3
不保持運行。但是,我可以在Kiteomatic中「運行」和「執行」,並且在shell中,我可以看到node_modules
看起來不錯,並且已經移到正確的位置,並且我可以手動執行node server.js
並獲得快樂。
FROM node:argon
# Copy over the host's project files
COPY . /usr/src/app
# This provides a starting point, but will later be overridden by `-v`, I hope
# Use this app directory moving forward through this file
WORKDIR /usr/src/app
# PULL TOGETHER `NODE_MODULES`
## Grab the package.json from the host and copy into `tmp`
COPY package.json /tmp/package.json
## Use that to get `node_modules` set up in `tmp`
RUN cd /tmp && npm install
## Copy that resulting node_modules into the WORKDIR
RUN cp -a /tmp/node_modules /usr/src/app/
EXPOSE 8080
我想我的問題,現在可能已經削減到...
- 我如何
server.js
開始的時候我跑的? - 我如何看到「實時編輯」(可能從
nodemon
開始)?