違い: COPY 命令は、リモート URL からのリソースの取得をサポートしていません。これは、docker build が実行されるホストからリソースを読み取り、イメージにコピーすることしかできませんが、ADD 命令は、リモート URL からのリソースの取得をサポートしています。これは URL から取得できます。リモート サーバーからリソースを読み取り、イメージにコピーします。
このチュートリアルの動作環境: linux5.9.8 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。
Dockerfile の COPY 命令と ADD 命令は両方とも、ホスト上のリソースをコンテナー イメージにコピーまたは追加できます。どちらもイメージのビルド プロセス中に完了します。
DockerFile の ADD と COPY の違い
COPY 命令と ADD 命令の唯一の違いは、次のとおりです。リモート URL リソースからの取得をサポートします。
COPY 命令は、docker build が実行されるホストからリソースを読み取り、イメージにコピーすることしかできません。 ADD 命令は、URL を介してリモート サーバーからリソースを読み取り、それらをイメージにコピーすることもサポートします。
同じ要件の場合、COPY 命令を使用することをお勧めします。 ADD 命令は、ローカル tar ファイルの読み取りと解凍に優れています。
ADD および COPY 命令
COPY は ADD と同じ構文を持ち、ファイルをコピーします。
ADD
新しいファイル、ディレクトリ、またはリモート ファイルの URL cbce1a3cf2f839037583dce8e845670b をコピーし、6be58d1426a577c69ada50a4bc87dd69 に追加します。
cbce1a3cf2f839037583dce8e845670b複数のリソースを指定できますが、それらがファイルまたはディレクトリの場合、そのパスはビルド コンテキストのソース (_WORKDIR_) を基準にして解釈されます。
各 cbce1a3cf2f839037583dce8e845670b にはワイルドカードを含めることができ、照合には Go の filepath.Match ルールが使用されます。例:
「hom」で始まるすべてのファイルを追加します:
ADD hom* /mydir/
以下の例では、? は「home.txt」などの任意の 1 文字に置き換えられます。
ADD hom?.txt /mydir/
6be58d1426a577c69ada50a4bc87dd69 は絶対パス、または WORKDIR を基準とした相対パスです。
ADD 命令には次の利点があります:
1. ソース パスがファイルで、ターゲット パスが / で終わる場合、dockerターゲット パスはディレクトリとして扱われ、ソース ファイルがそのディレクトリにコピーされます。
ターゲット パスが存在しない場合、ターゲット パスは自動的に作成されます。
2. ソース パスがファイルで、ターゲット パスが / で終わっていない場合、docker はターゲット パスをファイルとして扱います。
ターゲット パスが存在しない場合は、ターゲット パスの名前でファイルが作成され、コンテンツは同じソース ファイルからのものになります。
ターゲット ファイルが既存のファイルの場合は、ソースファイルに上書きされます もちろん内容のみが上書きされ、ファイル名は同じになります ターゲットファイル名。
ターゲット ファイルが実際に既存のディレクトリである場合、ソース ファイルはそのディレクトリにコピーされます。この場合、混乱を避けるために、表示を / で終了することが最善であることに注意してください。
3. ソース パスがディレクトリで、ターゲット パスが存在しない場合、docker はターゲット パスを使用してディレクトリを自動的に作成し、ソース パス ディレクトリにファイルをコピーします。
ターゲット パスが既存のディレクトリの場合、docker はソース パス ディレクトリ内のファイルをそのディレクトリにコピーします。
4. ソースファイルがアーカイブファイル(圧縮ファイル)の場合、docker が自動的に解凍します。
上記の利点は、ADD の欠点でもあります。
推奨される学習: 「docker ビデオ チュートリアル 」
以上がDocker のコピー命令と追加命令の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。