1つのコマンドで複数のディレクトリをコピーして、レイヤーの数を減らす方法はありますか?たとえば、次の代わりに:
COPY dirone ./dirone
COPY dirtwo ./dirtwo
COPY dirthree ./dirthree
私はやってみたいです:
COPY dirone/ dirtwo/ dirthree/ ./
ただし、これはディレクトリのcontentsをコピーしますが、ディレクトリ自体をコピーします。
これは、コピーコマンドの文書化された動作です。
<src>
はディレクトリであり、ファイルシステムのメタデータを含むディレクトリの内容全体がコピーされます。注:ディレクトリ自体はコピーされず、その内容だけがコピーされます。
最善の回避策は、ビルドフォルダーのディレクトリレイアウトを変更し、3つのフォルダーを1つの親フォルダーの下に移動して、親を追加することです。
BMitchが答えた のように、それはCOPYの振る舞いが期待されています。
代替手段は ADD
tarballの内容です。
初期tarballを作成します
tar -cvf dirs.tar dirone/ dirtwo/ dirthree/
ビルドに追加する
FROM busybox
ADD dirs.tar /
CMD find /dirone /dirtwo /dirthree
Tarballは自動的に抽出されます
○ →docker run c28f96eadd58
/dirone
/dirone/one
/dirtwo
/dirtwo/two
/dirthree
/dirthree/three
注tarファイルを更新するたびに、そのステップのDockerビルドキャッシュが無効になります。多数のファイルを処理している場合、tar -c
を実行するタイミングを賢くしたいかもしれません。 tarballから自動的に削除されないファイルを処理できる場合は、tar -u
を使用することもできます。
[ -f dirs.tar ] && tar -uf dirs.tar something || tar -cf dirs.tar something