GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Docker ADDとCOPY:違いは何ですか?

はじめに

Dockerfileを作成する場合、ファイル/ディレクトリをDockerfileにコピーするために使用できるコマンドが2つあります– ADD およびCOPY 。それらの機能の範囲にはわずかな違いがありますが、基本的に同じタスクを実行します。

では、なぜ2つのコマンドがあるのでしょうか。また、どちらをいつ使用するかをどのように知るのでしょうか。

この記事では、各コマンドについて説明し、Docker ADDとCOPYを分析して、どちらを使用するかを説明します。

DockerADDコマンド

ADDに注意することから始めましょう コマンドがCOPYより古い 。 Dockerプラットフォームのリリース以来、 ADD 命令はコマンドのリストの一部になっています。

このコマンドは、ファイル/ディレクトリを指定されたコンテナのファイルシステムにコピーします。

ADDの基本的な構文 コマンドは次のとおりです:

ADD <src> … <dest>

コピーするソースが含まれています( )の後に保存先( )が続きます )。ソースがディレクトリの場合、 ADD その中のすべて(ファイルシステムメタデータを含む)をコピーします。

たとえば、ファイルがローカルで利用可能であり、それを画像のディレクトリに追加する場合は、次のように入力します。

ADD /source/file/path  /destination/path

追加 URLからファイルをコピーすることもできます。外部ファイルをダウンロードして、目的の宛先にコピーできます。例:

ADD http://source.file/url  /destination/path

追加機能は、圧縮ファイルをコピーし、指定された宛先のコンテンツを自動的に抽出することです。この機能は、ローカルに保存された圧縮ファイル/ディレクトリにのみ適用されます。

次のように、ソースと、コマンドでコンテンツを抽出する場所を入力します。

ADD source.file.tar.gz /temp

URLから圧縮ファイル/ディレクトリをダウンロードして抽出することはできないことに注意してください。このコマンドは、外部パッケージをローカルファイルシステムにコピーするときに外部パッケージを解凍しません。

Dockerコピーコマンド

一部の機能の問題により、Dockerはコンテンツを複製するための追加コマンドを導入する必要がありました– COPY

密接に関連するADDとは異なり コマンド、 COPY 割り当てられた機能は1つだけです。その役割は、既存の形式で指定された場所にあるファイル/ディレクトリを複製することです。これは、圧縮ファイルの抽出を処理せず、そのままコピーすることを意味します。

この命令は、ローカルに保存されたファイルにのみ使用できます。したがって、URLとともに使用して、外部ファイルをコンテナにコピーすることはできません。

COPYを使用するには 指示に従って、基本的なコマンド形式に従ってください:

COPY <src> … <dest> 

例:

COPY /source/file/path  /destination/path 

Dockerコピーと追加

同様の新しいコマンドを追加する必要があったのはなぜですか?

ADDという事実 非常に多くの機能が実際には問題があることが判明しました。これは、非常に予測できない動作をしたためです。このような信頼性の低いパフォーマンスの結果は、多くの場合、抽出したいときにコピーし、コピーしたいときに抽出することになります。

Dockerは、既存の使用法が多いため、コマンドを完全に置き換えることができませんでした。下位互換性を回避するための最も安全なオプションは、 COPYを追加することでした。 コマンド–多様性は少ないが、信頼性の高いコマンド。

使用するもの(ベストプラクティス)

COPYの状況を考慮して コマンドが導入されましたが、ADDを維持することが必要であったことは明らかです。 Dockerは、Dockerfileを作成するためのベストプラクティスを概説した公式ドキュメントをリリースしました。これは、 ADDの使用を明示的に推奨していません。 コマンド

Dockerの公式ドキュメントには、 COPY ADD よりも透過的であるため、常にgo-to命令である必要があります

ローカルビルドコンテキストからコンテナにコピーする必要がある場合は、 COPYを使用することに固執します

Dockerチームは、 ADDの使用も強く推奨していません。 URLからパッケージをダウンロードしてコピーします。代わりに、 wgetを使用する方が安全で効率的です またはカール RUN 指図。そうすることで、追加の画像レイヤーを作成する必要がなくなり、スペースを節約できます。

URLから圧縮パッケージをダウンロードし、コンテンツを抽出して、アーカイブをクリーンアップするとします。

ADDを使用する代わりに 次のコマンドを実行します:

ADD http://source.file/package.file.tar.gz /temp
RUN tar -xjf /temp/package.file.tar.gz \
  && make -C /tmp/package.file \
  && rm /tmp/ package.file.tar.gz

使用する必要があります:

RUN curl http://source.file/package.file.tar.gz \
  | tar -xjC /tmp/ package.file.tar.gz \
  && make -C /tmp/ package.file.tar.gz

Docker
  1. DebianとUbuntu:違いは何ですか?

  2. 7zip、Xz、Gzip、Tarなど—違いは何ですか?

  3. grep、awk、sed の違いは何ですか?

  1. MySQLとMariaDB:それらの主な違いは何ですか

  2. Ubuntuで出荷されたカーネルとアップストリームカーネルの違いは何ですか?

  3. .profile .bash_profile と .bashrc の機能上の違いは何ですか?

  1. DockerfileのCOPYとADDの違いは何ですか?

  2. pfSenseとNetgearルーター:主な違いは何ですか?

  3. FedoraとUbuntu:主な違いは何ですか?