私は自分自身でこれをテストできることに気付きました。 EXPOSEを追加すると新しいファイルシステムレイヤーが追加されないことがわかりましたが、レイヤーを少なくしたり、キャッシュレイヤーのドッカーファイルをどの順序で作成しても問題ありません。
基本的に:すべてのコマンドは新しいレイヤーを作成し、ファイルシステムを変更するすべてのコマンドはファイルシステムレイヤーを作成します。 (開発環境で言う)を複数回実行すると
FROM ...
COPY smthing .
EXPOSE 80
:
FROM ...
EXPOSE 80
COPY smthing .
は異なっています。
EXPOSE
コマンドはキャッシュされ、smthing
ファイルが変更されても実行されません。何かのファイルが変更された場合、docker build
はこのコマンドだけを再実行します(残りはキャッシュから取得されます)。
第2の例では、 smthing
ファイルが変更された場合、EXPOSEコマンドも再構築されます。 (コピーコマンドの後のすべてが無効化され、docker build
で再実行されるため)。
最初のケースでは、2番目の例ではないcopyコマンドを再実行する必要があるEXPOSEポートを変更しますか。
しかし、どちらも同じ最終結果ファイルシステム層に賢明につながります。
docker inspect imageName #shows the file system layer
docker history imageName #shows all the layers
しかし、私が 'docker inspect test/image'を実行すると、それらをレイヤーとして見ることはできません。しかし、彼らはまだ最終結果画像のための余分な 'データ'を生成しますか? –
はい、イメージメタデータですが、ファイルシステムの差分ではありません。通常、あなたのdevの幸福を最大にするために、Dockerfilesの最後に 'CMD'の前に' EXPOSE'命令を使いたいとします。 – gvilarino