Dockerfile の「COPY」コマンドと「ADD」コマンドの違いを理解する

Dockerfile の「COPY」コマンドと「ADD」コマンドの違いを理解する
Dockerfile の「COPY」コマンドと「ADD」コマンドの違いを理解する

Dockerfile コマンドの説明

Dockerfile の「COPY」コマンドと「ADD」コマンドは、ファイルをコンテナーのファイルシステムに導入するために使用されますが、それぞれに異なる機能と最適な使用シナリオが付属しています。これらの違いを理解することは、Dockerfile を効率的に管理し、コンテナー化されたアプリケーションが期待どおりに動作するようにするために不可欠です。

「COPY」は主に単純なファイルのコピーに使用されますが、「ADD」はリモート URL の処理や圧縮ファイルの抽出などの追加機能を提供します。この記事では、各コマンドの微妙な違いを検討し、Docker ビルドを最適化するために一方を他方よりもいつ使用するかをガイドします。

指示 説明
FROM 構築される Docker イメージに使用する基本イメージを指定します。
WORKDIR コンテナ内の作業ディレクトリを設定します。
COPY ファイルまたはディレクトリをホストからコンテナのファイルシステムにコピーします。
ADD ファイル、ディレクトリ、またはリモート URL をコンテナのファイルシステムに追加し、ファイルの抽出を処理できます。
RUN コンテナーの環境でコマンドを実行します。
EXPOSE 実行時にコンテナが指定されたネットワーク ポートでリッスンすることを Docker に通知します。

Dockerfileコマンドの詳細説明

最初のスクリプトは、 COPY Dockerfile 内のコマンド。の COPY この命令は簡単で、ホスト システムから Docker コンテナのファイル システムにファイルまたはディレクトリをコピーするために使用されます。この例では、スクリプトは次で始まります。 FROM コマンド。ベースイメージを次のように指定します。 python:3.8-slim-buster 。の WORKDIR コマンドはコンテナ内の作業ディレクトリを次のように設定します。 /app 。これに続いて、 COPY コマンド。ホスト上の現在のディレクトリの内容を /app コンテナ内のディレクトリ。ファイルをコピーした後、 RUN コマンドは、で指定された必要な Python パッケージをインストールするために使用されます。 requirements.txt ファイル。最後に、 EXPOSE コマンドにより、ポート 80 が外部で使用できるようになります。

対照的に、2 番目のスクリプトでは、 ADD Dockerfile 内のコマンド。最初のスクリプトと同様に、次で始まります。 FROM 基本イメージを設定するコマンドと WORKDIR 作業ディレクトリを定義するコマンド。ここでの主な違いは、 ADD コマンドは、リモート URL からファイルを追加するために使用されます。この場合、 https://example.com/data/archive.tar.gz 。の ADD このコマンドはファイルをコピーするだけでなく、次のコマンドで示されるように、圧縮ファイルを自動的に抽出する機能もあります。 RUN を抽出するコマンド archive.tar.gz ファイルを /app ディレクトリ。これに続いて、 RUN コマンドは必要な Python パッケージをインストールします。 EXPOSE コマンドによりポート 80 が使用可能になります。

Dockerfile での COPY の使用

Dockerfile の例

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container at /app
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

Dockerfile での ADD の使用

Dockerfile の例

# Use an official Python runtime as a parent image
FROM python:3.8-slim-buster

# Set the working directory in the container
WORKDIR /app

# Add files from a remote URL
ADD https://example.com/data/archive.tar.gz /app/

# Extract the archive file
RUN tar -xzf /app/archive.tar.gz -C /app

# Install any needed packages specified in requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

# Make port 80 available to the world outside this container
EXPOSE 80

Dockerfile の COPY と ADD の詳細な分析

両方とも COPY そして ADD コマンドは、ホスト システムからコンテナのファイル システムにファイルをコピーする目的を果たします。コマンドには、それぞれが異なるシナリオに適した独特の機能と使用例があります。の COPY コマンドはよりシンプルで予測可能です。これは、アーカイブの抽出やリモート ファイルのフェッチなどの追加の処理が必要ない、基本的なファイル コピーに最適です。このコマンドにより、ローカルのファイルとディレクトリのみがコンテナーにコピーされるようになり、クリーンで安全なビルド環境が維持されます。

一方、 ADD コマンドはより多くの機能を提供しますが、複雑さが増し、潜在的なセキュリティ リスクが伴います。の ADD このコマンドは URL ダウンロードを処理し、次のような圧縮ファイルを自動的に抽出できます。 .tar.gzip、 そして .bzip2。これは、ビルド プロセスで、イメージの作成中に抽出する必要があるリモート アセットまたはアーカイブが必要な場合に有益です。ただし、これらの追加機能には、ファイルの意図しない上書きや、リモートの場所からダウンロードする際のセキュリティの脆弱性などのリスクが伴います。したがって、どちらを選択するかを決定する際には、これらの要素を慎重に考慮することが重要です。 COPY そして ADD

Dockerfile の COPY と ADD に関するよくある質問と回答

  1. の主な用途は何ですか COPY Dockerfile内のコマンド?
  2. COPY コマンドは主に、ローカル ファイルとディレクトリをホスト システムから Docker コンテナにコピーするために使用されます。
  3. いつ使用すべきか ADD 代わりにコマンドを実行する COPY?
  4. を使用する必要があります。 ADD URL からファイルをコピーする必要がある場合、またはビルド プロセス中に圧縮ファイルを抽出する必要がある場合に、このコマンドを使用します。
  5. を使用するとセキュリティにどのような影響がありますか? ADD 指示?
  6. ADD このコマンドは、既存のファイルを上書きしたり、脆弱性を導入したりする可能性があるため、特にリモート URL からファイルをダウンロードする場合にセキュリティ リスクを引き起こす可能性があります。
  7. できる? COPY コマンドで圧縮ファイルを解凍しますか?
  8. いいえ、 COPY このコマンドには圧縮ファイルを抽出する機能がありません。単にそれらをそのままコピーするだけです。
  9. どうやって ADD 圧縮ファイルを別の方法で処理する COPY?
  10. ADD コマンドは、次のような圧縮ファイルを自動的に抽出します。 .tar.gzip、 そして .bzip2 コンテナに追加されたとき。
  11. ワイルドカードを使用することは可能ですか? COPY 指示?
  12. はい、ワイルドカードを使用できます。 COPY パターンに一致する複数のファイルまたはディレクトリをコピーするコマンド。
  13. URL が提供された場合に何が起こるか ADD コマンドが届かない?
  14. URL が提供された場合、 ADD コマンドに到達できない場合、Docker ビルド プロセスは失敗します。
  15. 単純なローカル ファイル コピー操作にはどのコマンドを使用する必要がありますか?
  16. 単純なローカル ファイル コピー操作の場合は、 COPY コマンドを使用する方が簡単で安全です。
  17. できる? ADD ローカル ソースとリモート ソースの両方からファイルを追加するにはコマンドを使用する必要がありますか?
  18. はい ADD このコマンドはローカル ソースとリモート URL の両方からファイルを追加できるため、特定のシナリオではより汎用性が高くなります。

Docker COPY および ADD コマンドのまとめ

いつ使用するかを理解する COPY そして ADD Dockerfile 内の は、コンテナーのビルドを最適化するために不可欠です。その間 COPY ローカル ファイルに対しては簡単かつ安全です。 ADD 追加の機能を提供しますが、その代償として複雑さが増し、セキュリティ上の懸念が生じる可能性があります。特定のニーズに基づいて適切なコマンドを選択すると、Docker イメージの効率とセキュリティを強化できます。