Dockerfileを作成する場合、それにファイル/ディレクトリをコピーするために使用できる2つのコマンドがあります – ADD
とCOPY
。それらの機能の範囲にはわずかな違いがありますが、基本的に同じタスクを実行します。
では、なぜ2つのコマンドがあり、どちらを使用するかをどのようにして知るのでしょうか。
ドッカーADD
コマンド
ADD
コマンドがよりも古いことに注意してみましょうCOPY
。Dockerプラットフォームのリリース以来、このADD
命令はコマンドリストの一部になっています。
このコマンドは、ファイル/ディレクトリを指定されたコンテナーのファイルシステムにコピーします。
ADD
コマンドの基本的な構文は次のとおりです。
ADD <src> … <dest>
これには、コピーするソース(<src>
)の後に、保存先()が続きます<dest>
。ソースがディレクトリの場合、ADD
中のすべてをコピーします(ファイルシステムメタデータを含む)。
たとえば、ファイルがローカルで利用可能であり、それをイメージのディレクトリに追加する場合は、次のように入力します。
ADD /source/file/path /destination/path
ADD
URLからファイルをコピーすることもできます。外部ファイルをダウンロードして、目的の宛先にコピーできます。例えば:
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を使用する方がより安全で効率的です。そうすることで、追加の画像レイヤーの作成を避け、スペースを節約できます。