Dockerfile `COPY` and` ADD`コマンドの違いは何ですか?

本文翻译自:Dockerfileで`COPY`と` ADD`コマンドの違いは何ですか?

で、何BETWEEN -differenceでIS COPYADDA Dockerfileのコマンド、および使用時にIでしょう他の?でのオーバーひとつ でDockerfile COPYADD私は別のものを使用する場合の違いであり、どのようなコマンド?

COPY <src> <dest>

COPYコピーからファイルの意志による新たな新しい命令<src>とにATザ・コンテナのファイルシステムのパスにそれらを追加<dest> しますCOPYコマンド<src>新しいファイルをコピーし、パスに追加し<dest>、コンテナ・ファイル・システム

ADD <src> <dest>

以下からのファイルのウィル新しい新しい命令でADDをコピー<src>し、コンテナのATファイルシステムのパスにそれらを追加する<dest> ADD命令はなり<src>新しいファイルをコピーし、パスに追加し<dest>、コンテナファイルシステム。


#1階

参考:https://stackoom.com/question/1gike/Dockerfile -COPY-と-ADD-コマンドの違いは何ですか


ハウス#2

万一あなたによってでチェックADDし、COPYA主な-differenceで一言で言えばしかしでAN徹底的な彼らの行動の説明のドキュメントは、つまりADD、最後の内でより行うことができますCOPY あなたが見直すべきであるADDCOPY彼らの行動の詳細な説明については、ドキュメントが、一言で言えば、主な違いそれはADD単なるより行うことができますCOPY

  • ADDandroid.permission <src>A URLであるためには、 ADD許可<src>するURL
  • で、参照するには以下のコメントADD ドキュメンテーション:ことを明記 以下のコメントを参照してください、ADD 文書が明確に述べています:

    内のローカルtarアーカイブであれば認識圧縮形式(アイデンティティ、GZIP、BZIP2またはXZ)それはディレクトリとしてアンパックである。 ローカルtarアーカイブが認識されている圧縮形式(アイデンティティ、GZIP、BZIP2またはXZ)場合は、ディレクトリに解凍します。 リモートのURLからのリソースは解凍されていません。 リモートURLのリソースが解凍されることはありません。

ノートのことを書くDockerfilesためのベストプラクティスが使用することを提案しているCOPYのマジックではADD必要ありません。 してくださいノートを書かDockerfilesベストプラクティスはの使用をお勧めしますCOPY必要としないADD魔法を。 そうしないとあなたがコピーすることを意味したときに驚いいつかをGETする可能性がある(あなたが検索にこの答えを持っていたので、操作する)keep_this_archive_intact.tar.gzあなたの容器の中に、しかし、その代わりに、あなたはあなたのファイルシステム上で内容にスプレーします。 1日(あなたはこの答えを見つけなければならないので)そうでなければ、あなたがかもしれませんあなたがすることを意味するので、驚かれることでしょうkeep_this_archive_intact.tar.gz、あなたの容器の中にコピーしますが、コンテンツは、ファイルシステム上に噴霧されます。


ハウス#3

COPYそれはある COPY

「追加」と同じですが、なしのタールおよびリモートURLハンドリング。 そして、「ADD」と同じ、ないリモートのURLとタールの処理はありません。

参考ストレートソースコードから 直接ソースからの引用しました。


#4階

いくつかは、その点が上にある公式ドキュメント:ライティングDockerfilesのベストプラクティス この点において、いくつかの公式文書があります。ベストプラクティスDockerfilesの製造は、

画像サイズ事項使用して、のでADDリモートのURLからパッケージ標準パッケージを取得するために強くお勧めします; による画像の大きさにすることは重要であり、強く使用しないことをお勧めしADDリモートでパッケージを入手するためのURLを。 あなたはあなたを使うべきcurlか、wgetINSTEAD。 あなたは使うべきcurlwget代わりに。 そのように、あなたはファイル削除することができ 、不要になった彼らは、抽出されてきた後に、あなたのイメージに別の層を追加する必要はありません。 この方法を、あなたは抽出することができ、不要になったファイルを削除することができ、かつ画像に追加する必要はありません他の層。

RUN mkdir -p /usr/src/things \
  && curl -SL http://example.com/big.tar.gz \
    | tar -xJC /usr/src/things \
  && make -C /usr/src/things all

他の項目は必要ありませんのために(ファイル、ディレクトリ)ADDあなたがすべき常に使用、Sタール自動抽出機能」COPY 必要ないためADD、常に使用する必要があり、自動的にタールの特徴を抽出するために他の項目(ファイル、ディレクトリ)COPY


ハウス#5

ドッカーのドキュメントから: ドッカードキュメントから:

ADDまたはCOPY 追加またはコピー

ADDおよびCOPYは、機能的に類似しているが 、一般的に言えば、コピーが。好ましい 機能が類似ADDおよびCOPYが、一般的には、COPYが好ましいです。 それはより透明だからだ ADD。 それはADDよりも透明であるためであること。 COPYだけですぐにではないコンテナでローカルファイルにの基本COPYINGの支持体、ADDは(ローカルのみタールの抽出など、およびリモートサポートのURL)いくつかの特長を有しているが、明らかである。 COPYはローカルのみ基本的にコンテナにコピーされたファイル、およびADDをサポートしています(ローカルとリモートのタールエキスのURLのサポートが限定されているように)いくつかの機能を持って、これらの機能は明らかではありません。 したがって、ADDのための最良の使用である ADDのrootfs.tar.xzに/。ような画像にローカルtarファイルの自動抽出、 例えばADDのrootfsのような画像に対してローカルしたがって、ADDの最適な使用が自動的に抽出されたtarファイルは、。図tar.xz /。

多く:ライティングDockerfilesためのベストプラクティス の詳細:ベストプラクティスDockerfilesの準備


ハウス#6

あなたはAに追加A IFのxx.tar.gzしたい/usr/localコンテナでは、IT解凍、および無駄にため、[削除圧縮パッケージ変更。 あなたは、コンテナに追加しxx.tar.gzにしたい場合は/usr/local、それ解凍し、その後、不要なを削除しますアーカイブ。

COPYの場合: COPYの場合:

COPY resources/jdk-7u79-linux-x64.tar.gz /tmp/
RUN tar -zxvf /tmp/jdk-7u79-linux-x64.tar.gz -C /usr/local
RUN rm /tmp/jdk-7u79-linux-x64.tar.gz

ADDの場合: ADDの場合:

ADD resources/jdk-7u79-linux-x64.tar.gz /usr/local/

支持体は、ローカルのみADD抽出をタール。 ADDは、ローカルタールエキスをサポートしています。 それに加えて、COPYは、3つの層を使用するが、唯一つの層を使用する追加する。 また、COPY三を使用するが、ADDの一層のみ。

オリジナルの記事は0公表 ウォンの賞賛136 ビュー830 000 +

おすすめ

転載: blog.csdn.net/xfxf996/article/details/105181882