Dockerfileを作成する場合、それにファイル/ディレクトリをコピーするために使用できる2つのコマンドがあります – ADDとCOPY。それらの機能の範囲にはわずかな違いがありますが、基本的に同じタスクを実行します。
では、なぜ2つのコマンドがあり、どちらを使用するかをどのようにして知るのでしょうか。
ドッカーADDコマンド
ADDコマンドがよりも古いことに注意してみましょうCOPY。Dockerプラットフォームのリリース以来、このADD命令はコマンドリストの一部になっています。
このコマンドは、ファイル/ディレクトリを指定されたコンテナーのファイルシステムにコピーします。
ADDコマンドの基本的な構文は次のとおりです。
ADD <src> … <dest>
これには、コピーするソース(<src>)の後に、保存先()が続きます<dest>。ソースがディレクトリの場合、ADD中のすべてをコピーします(ファイルシステムメタデータを含む)。
たとえば、ファイルがローカルで利用可能であり、それをイメージのディレクトリに追加する場合は、次のように入力します。
ADD /source/file/path /destination/path
ADDURLからファイルをコピーすることもできます。外部ファイルをダウンロードして、目的の宛先にコピーできます。例えば:
ADD http://source.file/url /destination/path
追加機能として、圧縮ファイルがコピーされ、指定された宛先のコンテンツが自動的に抽出されます。この機能は、ローカルに保存された圧縮ファイル/ディレクトリにのみ適用されます。
ADD source.file.tar.gz /temp
URLから圧縮ファイル/ディレクトリをダウンロードして抽出することはできないことに注意してください。コマンドは、ローカルファイルシステムにコピーするときに外部パッケージを解凍しません。
ドッカーCOPYコマンド
いくつかの機能上の問題により、Dockerはコンテンツを複製するための追加コマンドを導入する必要がありました– COPY。
密接に関連するADDコマンドとは異なり、COPY割り当てられた機能は1つだけです。その役割は、指定された場所にあるファイル/ディレクトリを既存の形式で複製することです。つまり、圧縮ファイルの抽出は処理されず、そのままコピーされます。
この命令は、ローカルに保存されたファイルに対してのみ使用できます。したがって、URLとともに使用して外部ファイルをコンテナーにコピーすることはできません。
を使用するには COPY命令には、基本的なコマンド形式に従います。
次のように、ソースとコマンドでコンテンツを抽出する場所を入力します。
COPY <src> … <dest>
例えば:
COPY /source/file/path /destination/path
使用するコマンド(ベストプラクティス)
COPYコマンドが導入された状況を考慮すると、維持ADDが必要であったことは明らかです。Dockerは、Dockerfileを作成するためのベストプラクティスを概説する公式ドキュメントをリリースしましたADD。
Dockerの公式ドキュメントには、よりわかりやすいCOPYため、常に頼りになる説明であると記載されていADDます。
ローカルビルドコンテキストからコンテナーにコピーする必要がある場合は、そのまま使用しCOPYます。
Dockerチームは、を使用ADDしてURLからパッケージをダウンロードおよびコピーすることも強くお勧めしません。代わりに、RUNコマンド内でwgetまたはcurlを使用する方がより安全で効率的です。そうすることで、追加の画像レイヤーの作成を避け、スペースを節約できます。