Dockerfile のコピー コマンドと追加コマンドの違い

Isaac Tony 2024年2月15日
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.pyrequirements.txt ファイルをコピーします。 ここで、この Docker イメージをビルドし、それを使用して Docker コンテナーを作成すると、Docker コンテナーのファイル システムで 2つのファイルを確実に見つけることができます。

以下の例では、上記の Dockerfile に基づいて Docker イメージを構築します。

~/my-app$ Docker build -t new-image .

Dockerfile に基づいて Docker イメージをビルドする

イメージを取得したら、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
Isaac Tony avatar Isaac Tony avatar

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

関連記事 - Docker Command