Dockerfile コマンドの説明
Dockerfile の「COPY」コマンドと「ADD」コマンドは、ファイルをコンテナーのファイルシステムに導入するために使用されますが、それぞれに異なる機能と最適な使用シナリオが付属しています。これらの違いを理解することは、Dockerfile を効率的に管理し、コンテナー化されたアプリケーションが期待どおりに動作するようにするために不可欠です。
「COPY」は主に単純なファイルのコピーに使用されますが、「ADD」はリモート URL の処理や圧縮ファイルの抽出などの追加機能を提供します。この記事では、各コマンドの微妙な違いを検討し、Docker ビルドを最適化するために一方を他方よりもいつ使用するかをガイドします。
指示 | 説明 |
---|---|
FROM | 構築される Docker イメージに使用する基本イメージを指定します。 |
WORKDIR | コンテナ内の作業ディレクトリを設定します。 |
COPY | ファイルまたはディレクトリをホストからコンテナのファイルシステムにコピーします。 |
ADD | ファイル、ディレクトリ、またはリモート URL をコンテナのファイルシステムに追加し、ファイルの抽出を処理できます。 |
RUN | コンテナーの環境でコマンドを実行します。 |
EXPOSE | 実行時にコンテナが指定されたネットワーク ポートでリッスンすることを Docker に通知します。 |
Dockerfileコマンドの詳細説明
最初のスクリプトは、 Dockerfile 内のコマンド。の この命令は簡単で、ホスト システムから Docker コンテナのファイル システムにファイルまたはディレクトリをコピーするために使用されます。この例では、スクリプトは次で始まります。 コマンド。ベースイメージを次のように指定します。 python:3.8-slim-buster 。の コマンドはコンテナ内の作業ディレクトリを次のように設定します。 。これに続いて、 コマンド。ホスト上の現在のディレクトリの内容を /app コンテナ内のディレクトリ。ファイルをコピーした後、 コマンドは、で指定された必要な Python パッケージをインストールするために使用されます。 ファイル。最後に、 コマンドにより、ポート 80 が外部で使用できるようになります。
対照的に、2 番目のスクリプトでは、 Dockerfile 内のコマンド。最初のスクリプトと同様に、次で始まります。 基本イメージを設定するコマンドと 作業ディレクトリを定義するコマンド。ここでの主な違いは、 ADD コマンドは、リモート URL からファイルを追加するために使用されます。この場合、 。の このコマンドはファイルをコピーするだけでなく、次のコマンドで示されるように、圧縮ファイルを自動的に抽出する機能もあります。 を抽出するコマンド archive.tar.gz ファイルを ディレクトリ。これに続いて、 コマンドは必要な Python パッケージをインストールします。 コマンドによりポート 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 の詳細な分析
両方とも そして コマンドは、ホスト システムからコンテナのファイル システムにファイルをコピーする目的を果たします。コマンドには、それぞれが異なるシナリオに適した独特の機能と使用例があります。の コマンドはよりシンプルで予測可能です。これは、アーカイブの抽出やリモート ファイルのフェッチなどの追加の処理が必要ない、基本的なファイル コピーに最適です。このコマンドにより、ローカルのファイルとディレクトリのみがコンテナーにコピーされるようになり、クリーンで安全なビルド環境が維持されます。
一方、 コマンドはより多くの機能を提供しますが、複雑さが増し、潜在的なセキュリティ リスクが伴います。の このコマンドは URL ダウンロードを処理し、次のような圧縮ファイルを自動的に抽出できます。 、 .gzip、 そして 。これは、ビルド プロセスで、イメージの作成中に抽出する必要があるリモート アセットまたはアーカイブが必要な場合に有益です。ただし、これらの追加機能には、ファイルの意図しない上書きや、リモートの場所からダウンロードする際のセキュリティの脆弱性などのリスクが伴います。したがって、どちらを選択するかを決定する際には、これらの要素を慎重に考慮することが重要です。 そして 。
Dockerfile の COPY と ADD に関するよくある質問と回答
- の主な用途は何ですか Dockerfile内のコマンド?
- の コマンドは主に、ローカル ファイルとディレクトリをホスト システムから Docker コンテナにコピーするために使用されます。
- いつ使用すべきか 代わりにコマンドを実行する ?
- を使用する必要があります。 URL からファイルをコピーする必要がある場合、またはビルド プロセス中に圧縮ファイルを抽出する必要がある場合に、このコマンドを使用します。
- を使用するとセキュリティにどのような影響がありますか? 指示?
- の このコマンドは、既存のファイルを上書きしたり、脆弱性を導入したりする可能性があるため、特にリモート URL からファイルをダウンロードする場合にセキュリティ リスクを引き起こす可能性があります。
- できる? コマンドで圧縮ファイルを解凍しますか?
- いいえ、 このコマンドには圧縮ファイルを抽出する機能がありません。単にそれらをそのままコピーするだけです。
- どうやって 圧縮ファイルを別の方法で処理する ?
- の コマンドは、次のような圧縮ファイルを自動的に抽出します。 、 、 そして .bzip2 コンテナに追加されたとき。
- ワイルドカードを使用することは可能ですか? 指示?
- はい、ワイルドカードを使用できます。 パターンに一致する複数のファイルまたはディレクトリをコピーするコマンド。
- URL が提供された場合に何が起こるか コマンドが届かない?
- URL が提供された場合、 コマンドに到達できない場合、Docker ビルド プロセスは失敗します。
- 単純なローカル ファイル コピー操作にはどのコマンドを使用する必要がありますか?
- 単純なローカル ファイル コピー操作の場合は、 コマンドを使用する方が簡単で安全です。
- できる? ローカル ソースとリモート ソースの両方からファイルを追加するにはコマンドを使用する必要がありますか?
- はい このコマンドはローカル ソースとリモート URL の両方からファイルを追加できるため、特定のシナリオではより汎用性が高くなります。
いつ使用するかを理解する そして Dockerfile 内の は、コンテナーのビルドを最適化するために不可欠です。その間 ローカル ファイルに対しては簡単かつ安全です。 ADD 追加の機能を提供しますが、その代償として複雑さが増し、セキュリティ上の懸念が生じる可能性があります。特定のニーズに基づいて適切なコマンドを選択すると、Docker イメージの効率とセキュリティを強化できます。