たろログ2

実験的運用により、記事品質が乱高下することがあります。予めご了承ください。

2022-08-11 Docker におけるファイルコピー

前提

記載例は、自分がプライベートで作成している PHP アプリケーションの Dockerfile から借用した。

COPY vs ADD

ADD は、 tar ファイルを解凍しつつコピーする際に利用する。

基本的には、機能が絞られていてシンプルな COPY を利用することが推奨されている。

ファイルのコピー

下記のようにコピーする。複数ファイルのコピーが可能である。

COPY ./phinx.php ./
COPY ./composer.json ./composer.lock ./
COPY ./bin/run.sh ./bin/

コピー先がディレクトリの場合は、最後にスラッシュをつけること。

以下のようにコピーすると、./bin/run.sh のコンテンツが、 ./bin という名称でファイルコピーされてしまう。

COPY ./bin/run.sh ./bin

ディレクトリのコピー

以下のように行う。

COPY ./db ./db
COPY ./src ./src

残念ながら、以下のようにまとめて記載することはできない。

COPY ./db ./src ./

この場合、 ./db、./src のコンテンツの中身が、 ./ 以下に展開されてしまう。

つまり、コンテナ内のファイル構造はこんなことになる。

./Application ディレクトリなどは、元々 ./src 以下にあったものである。

これが ./ 以下に展開される形でコピーされているのがわかる。

total 2920
drwxrwxrwx  1 www-data www-data 4096 Aug 11 06:47 .
drwxr-xr-x  1 root  root        4096 Apr 10  2021 ..
drwxrwxr-x  3 root  root        4096 May  5 20:54 Application
drwxrwxr-x 11 root  root        4096 Feb 22 14:10 Domain
drwxrwxr-x  2 root  root        4096 Jan 16  2022 Exception
drwxrwxr-x  9 root  root        4096 Feb 10 04:28 Infrastructure
-rw-rw-r--  1 root  root        786 May  5 23:16 composer.json
-rw-rw-r--  1 root  root    187598 May  5 20:54 composer.lock
-rwxr-xr-x  1 root  root    2722254 Aug 11 06:39 composer.phar
drwxrwxr-x  2 root  root        4096 Dec 25  2021 migrations
-rw-rw-r--  1 root  root        1138 Feb  8  2022 phinx.php
-rw-rw-r--  1 root  root        63 Aug 11 06:42 run.sh
-rw-rw-r--  1 root  root        1532 May  5 22:55 runCheck.php
drwxr-xr-x 21 root  root        4096 Aug 11 06:47 vendor

Ref

Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

Copy multiple directories with one command - Stack Overflow