私の週末のプロジェクトはDockerを探索することでしたが、単純なnode.jsプロジェクトが良いと思っていました。 「ライブ編集」とは、ホストシステム上のファイルを操作できるようにしたいということです.Dockerコンテナがこれらの変更を直ちに反映することを(できるだけ少ない努力で)見ています。node.jsを "ライブ編集"してDockerと連携させるには
Dockerizing a Node.js web appは順調に進み、グーグルとスラッシングが始まりました。 ADD
が(docker run
ではない)docker build
で完全に満たされているので、私は生きて編集を持つことができない、
私は
ADD
方法はnodejsチュートリアルに注意し使用している場合:私は、私は今、次のことを知っていると思います。私は
-v `pwd`:/usr/src/app
のようなものを持つノードプロジェクトのディレクトリをマウントした場合のいずれかnode_modules
が存在しない(と-v
がdocker run
引数であるため、ボリュームが読み込まれますし、ビルド時に利用できない)ので、それは実行されませんホストのプロジェクトディレクトリにnode_modules
をあらかじめ入れておく必要があります。ちょうど良いとはかぎりませんし、OSの互換性の問題があるかもしれません。
マイ怒っ初心者のスラッシングは3回、自分の欠点や明白な障害が発生し、それぞれに蒸留することができます。
1)ADD
を使用したNode.jsチュートリアルは完全に動作しますが、「ライブ編集」はありません。私はこれが私が必要とするべきではないと期待していますが、基本的な配線が適切に実行されていることが少なくとも証明されています。
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
と、その後、ホストのプロジェクトディレクトリにそれを移動し、その後-v `pwd`:/usr/src/app
でプロジェクトのディレクトリをマウント設定を取得node_modules
。これが成功したら、私は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とシェルで "実行"と "実行"することができます私は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
で始まります)。