2016-07-05 11 views
0

私の週末のプロジェクトは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が存在しない(と-vdocker 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で始まります)。

答えて

0

このDockerfileが私に必要なものを手に入れたようです。

FROM node:argon 

# Adding `nodemon` as a global so it's available to the `CMD` instruction below 
RUN npm install -g nodemon 

# Copy over the host's project files 
COPY . /usr/src/app 
# This provides a starting point, but will later be overridden by `docker run -v...` 

# Use this app directory moving forward through this file 
WORKDIR /usr/src/app 

# PREPARE `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 
RUN cd /tmp && npm install 

## Copy that resulting `node_modules` into the WORKDIR 
RUN cp -a /tmp/node_modules /usr/src/app/ 

EXPOSE 8080 
CMD [ "nodemon", "./server.js" ] 

私はそうのようにこれを構築:よう

  • で応答を実行している

    • 滞在...

      docker run -v `pwd`:/usr/src/app -p 49160:8080 -d martink/node-docker 
      

      この:

      docker build -t martink/node-docker . 
      

      そしてそうのようにそれを実行しますexpec http://localhost:49160

    • でテッドはすぐに

    が、私は私がこの作業を持っているようだという嬉しいホストマシンのファイルに対して行われserver.jsへの変更をピックアップ。私がそこに悪い習慣を持っていれば、私はフィードバックを感謝します。 :)

  • 関連する問題