本文翻译自:Dockerfileで`COPY`と` ADD`コマンドの違いは何ですか?
で、何BETWEEN -differenceでIS COPY
とADD
A Dockerfileのコマンド、および使用時にIでしょう他の?でのオーバーひとつ でDockerfile COPY
とADD
私は別のものを使用する場合の違いであり、どのようなコマンド?
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
し、COPY
A主な-differenceで一言で言えばしかしでAN徹底的な彼らの行動の説明のドキュメントは、つまりADD
、最後の内でより行うことができますCOPY
: あなたが見直すべきであるADD
とCOPY
彼らの行動の詳細な説明については、ドキュメントが、一言で言えば、主な違いそれはADD
単なるより行うことができますCOPY
。
-
ADD
android.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
か、wget
INSTEAD。 あなたは使うべきcurl
かwget
代わりに。 そのように、あなたはファイル削除することができ 、不要になった彼らは、抽出されてきた後に、あなたのイメージに別の層を追加する必要はありません。 この方法を、あなたは抽出することができ、不要になったファイルを削除することができ、かつ画像に追加する必要はありません他の層。
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の一層のみ。