Docker について学習しながら、dockerfile を整理するためにホスト マシン上にいくつかの異なるディレクトリを作成しました。実行した Dockerfile は次のようになります。
FROM crystal/centos
MAINTAINER crystal
ADD ./rpms/test.rpm ./rpms/
RUN yum -y --nogpgcheck localinstall /rpms/test.rpm
実際の rpm は 1 GB しかありません。しかし、 を実行しようとするとsudo docker build -t="crystal/test" .
、ビルド コンテキストを Docker デーモンに送信して 3.5 GB になります。Docker イメージのビルドを続行する際に、他に気付いていないことがあるのでしょうか? ホスト マシン上の他のディレクトリでイメージをさらにビルドすると、メモリが蓄積されるのでしょうか?
ベストアンサー1
Docker クライアントは、"ビルド コンテキスト" 全体を Docker デーモンに送信します。そのビルド コンテキスト (デフォルトでは) は、 がDockerfile
含まれるディレクトリ全体 (つまり、ツリー全体rpms
) です。
設定することができます.dockerignore
Docker が一部のファイルを無視するようにするファイル。試してみるとよいでしょう。
あるいは、rpms
フォルダを の 1 つ上のディレクトリ レベルに移動しDockerfile
、のディレクトリtest.rpm
へのシンボリック リンクのみを作成することもできます。Dockerfile
多くの場合、フォルダーを追加する.git
.dockerignore
必要がありますが、これが、ここのコメントで一部のユーザーにとって 150 MB -> 5 GB の違いの原因となっています。