randddevチームのDockerfileを作成するときに...DockerDockerfile畑田です。チームのDockerfileを作成するときに、できるだけdocker社の意図したものに近いわかりやすいものを作りたくてドキュメントを紐解いています。一次情報の旨味を消さないように気をつけて書いています。buildのとき)にコンテナ内で実行されます。一つのDockerfileは複数のRUNを持ち、ビルドステップに応じて呼び出されます。RUNの数だけレイヤー(中間生成コンテナ)が生成されるので少ないに越したことはないです。CMDCMDは完成したイメージからコンテナを作成するときに実行されます。runの時に実行されます。1つのDockerfileにつき1つのCMDが呼び出され、複数書いてあったとしても最後に書かれたものが実行されます。runの引数としてcommandが指定されていた場合、これが最後のコマンドと捉えられ、これに上書きされてしまいます。runの引数のcommandに上書きされません。ENTRYPOINTはCMDと組み合わせて使います。ENTRYPOINTとCMDが両方書かれているとき、書く順番によらず、ENTRYPOINTを実行するコマンドとして、CMDをそのコマンドのargumentとして、実行されます。commandに上書きされないがCMDは上書きされるという性質を利用して、引数のみを上書き可能にしたコマンドを用意することもできます。DockerfileのVOLUMEについてまず、Dockerfile内ではコンテナ側のdirectoryしか指定することができません。これはいかなる環境においても同様の挙動をさせたいというDockerの設計思想による仕様です。開発のためにボリュームをマウントしたい場合はdocker-composeを使うしかないようです。docker-composeを使っていないプロジェクトはあまりないのでそれほど問題にはならないですが、deployのときなどには気をつける必要があるかもしれません。URLからのデータの取得をサポートしています。したがって、localファイルのコピーを意図しているときにはより限定的な意味のCOPYを用いることがdockerによって推奨されています。URLを用いてリソースを取得することは非推奨とされており、curlやwgetをRUNコマンドによって実行することが推奨されます。このため、ADDコマンドはtar展開を含んだcontainerへのリソース追加に適用することが推奨されていると考えられます。この性質を知っていると、Dockerfileの可読性がぐんと上がりますが、そもそもこれを意識せず書かれたDockerfileが世に溢れており、却って生きづらくなるかもしれません。上の項目でも推奨しているCOPYについて、directoryをコピーするときに注意する必要があります。以下のようにファイルをコピーするときにはなんら問題は生じません。./しかし、次のようにdirectory自体をコピーしようとするときに問題は生じます。machineの./のなかに展開されてコピーされてしまいます。(イメージはJavaScriptの[...data]です。machineの./src/と全く同じものになるし、もともと中身が入っていればmergeされてしまうということです。machineの./の下に./srcとしてコピーしたい場合は以下のように記述してください。./src/この仕様に若干の違和感があるのは、Linux系共通コマンドである以下のものと仕様が異なるからだと思います。コメントをキャンセルメールアドレスが公開されることはありません。付いている欄は必須項目ですコメント名前*メール*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。WordPress.。