2017-05-03 7 views
-1

でのコピーは次のように私は私のDockerfileのために持っているものです。それ以外の場合は、ソースファイルのみをイメージにコピーします。 これは意図したとおりに動作しますか?コピー特定の第1のファイルとすべてのDockerfile

+3

*「これは意図したとおりに動作しますか?」* - 試しましたか? – axiac

+0

もちろん、私は試しましたが、node_modulesが1回、2回、または何もコピーされていないかどうかを私に知らせる方法はありません。私の質問は、このアプローチの効率性です。 –

+0

'Dockerfile'のコマンドは、イメージが構築されるときに一度だけ実行されます。彼らの効率性については心配しません。とにかく、あなたのコマンドは 'node_directory'を2回コピーしていると思います。 Dockerイメージの 'node_modules'の内容を常に最新の状態にしたい場合は、それをイメージにコピーしないでください。 ['VOLUME'](https://docs.docker.com/engine/reference/builder/#volume)と[' -v'](https://docs.docker.com/engine/reference/commandline)を使用してください。/run /#mount-volume -v ---読み取り専用)コマンドラインオプションを使用して、毎回実行時にホストディレクトリをイメージの '/ src/node_modules'ディレクトリにマップします。 – axiac

答えて

0

これは2回コピーされます。 Dockerキャッシュは、現在のコマンドと前のレイヤーを調べます。現在のコマンドのDockerコンテキストで何かが変更された場合、そのコマンドは実行されます。実行に部分キャッシュを使用しません。

+0

'node_modules'を1回だけコピーすることを保証する方法はありますか?私が今考えていることは、 '.dockerignore'ファイルに' node_modules'をリストすることですが、それ以外の方法があるのだろうかと思います。 –

+0

保証する唯一の方法は、node_modulesをコピーしてから、COPYの代わりに他のすべてをコピーすることです。/src/ ディレクトリ内のすべてのものに対して個別のCOPYコマンドを実行し、まずnode_modulesのCOPYを実行します。もっと冗長で、より多くのレイヤーを作成します。しかし、それはnode_modulesが一度だけコピーされることを保証する唯一の方法です。 – mattsp1290

関連する問題