Dockerfile のコピー コマンドと追加コマンドの違い
Dockerfile は、Docker イメージの構築に使用されるすべてのコマンドを含むテキスト ドキュメントです。 最近、構成を管理し、展開を自動化するためのデフォルトのツールとして、Docker が広く採用されています。
自動ビルドなどの Dockerfile を使用する高度な機能が、開発者が Docker を採用する理由です。 その他には、アプリケーションを実行する環境からアプリケーションを分離し、迅速にセキュリティを確保することが含まれます。
Docker コンテナーを作成する場合、多くの場合、ホストから Docker イメージにファイルを転送する必要があります。 これらのファイルには、アプリケーションの実行に必要なライブラリまたはプロパティ ファイルを含めることができます。
Dockerfile の COPY
コマンドと ADD
コマンドの違い
Dockerfile では、COPY
または ADD
コマンドを使用してこれらのファイルをコピーできます。 これらのコマンドは機能的に同じです。 ただし、いくつかの違いがあります。
COPY
および ADD
コマンドは、以下の構文に従います。
COPY <src> <dest>
ADD <src> <dest>
どちらの命令も、localhost の <src>
にあるファイルまたはディレクトリをコピーし、コンテナーのファイル システムの場所 <dest>
に追加します。 たとえば、以下の Dockerfile では、ファイルを現在のディレクトリから Docker イメージのディレクトリ /var/www
にコピーします。
# base image
FROM python
# Set your working directory
WORKDIR /var/www/
# Copy the necessary files
COPY ./app.py /var/www/app.py
ADD./requirements.txt /var/www/requirements.txt
# Install the necessary packages
RUN pip install -r /var/www/requirements.txt
ADD mkdir -p /var/www/new_directory
# Run the app
CMD ["echo", "Hello, Developer"]
app.py
と requirements.txt
ファイルをコピーします。 ここで、この Docker イメージをビルドし、それを使用して Docker コンテナーを作成すると、Docker コンテナーのファイル システムで 2つのファイルを確実に見つけることができます。
以下の例では、上記の Dockerfile に基づいて Docker イメージを構築します。
~/my-app$ Docker build -t new-image .
イメージを取得したら、docker run
コマンドを使用して Docker コンテナーを作成します。 これに加えて、コンテナ内で bash
も起動します。
コード:
~/my-app$ Docker run -it new-image bash
/var/www
ディレクトリ内のファイルを一覧表示すると、app.py
ファイルと requirements.txt
ファイルの両方が表示されます。
コード:
root@841d1e8d8c25:/var/www# ls
app.py new_directory requirements.txt
上記の Docker コンテナーでは、ADD
コマンドと COPY
コマンドの両方を使用して、ホストのディレクトリから Docker のディレクトリにファイルをコピーできました。
ただし、このような基本的なファイルの Docker コンテナーへのコピーを実行する場合は、COPY
コマンドを使用することをお勧めします。
docker-file のベスト プラクティスによると、ローカル ファイルのコピー以外の機能を必要としない場合は、COPY
コマンドが適しています。
一方、ADD
コマンドには、より多くの機能があります。 たとえば、このコマンドを使用して、ローカルの tar
ファイルを Docker イメージに抽出できます。
これに加えて、ADD
コマンドはリモート URL をサポートしており、これら 2つの操作は COPY
コマンドでは実行できません。 ビルドしている Docker イメージのサイズを縮小しようとしている場合、前者のコマンドは望ましくない場合があります。
これは、特にリモート URL からパッケージを取得している場合に、ADD
コマンドが Docker イメージのサイズを大幅に増大させる可能性があるためです。
ホストから単にファイルをコピーするために ADD
コマンドを使用すると、Docker イメージのファイルシステムに予期せずファイルがコピーされる可能性があります。
結論として、これら 2つのコマンドは類似点があり、同じ意味で使用できますが、引き続き COPY
コマンドを使用する必要があります。 一方、ADD
コマンドは、必要な場合にのみ、細心の注意を払って使用することができます。
Isaac Tony is a professional software developer and technical writer fascinated by Tech and productivity. He helps large technical organizations communicate their message clearly through writing.
LinkedIn