web-dev-qa-db-ja.com

新しいDocker --squashの仕組み

Docker 1.13に、新しい-squashパラメーターが追加されました。

画像のサイズを小さくすることと、レイヤーにある秘密ファイルを「隠す」ことを望んでいます。

以下では、-squashパラメーターを使用してビルドする場合としない場合のビルドの違いを確認できます。

スカッシュなし

enter image description here

スカッシュあり

enter image description here

私の質問になりました。

自分のfirstレイヤーにシークレットファイルを追加する場合、シークレットファイルをmysecondレイヤー、最後にthirdレイヤーのシークレットファイルを削除し、-squashフラグでビルドします。

シークレットファイルを取得するために、何らかの方法がありますか?

46
Fore

最初のレイヤーにシークレットファイルを追加し、2番目のレイヤーでシークレットファイルを使用し、最後に3番目のレイヤーでシークレットファイルを削除してから、-squashフラグを使用してビルドします。

シークレットファイルを取得する方法はありますか?

回答:画像持っていない秘密のファイル。

--squashの仕組み:

ビルドが完了すると、Dockerは、各レイヤーからの差分を単一の新しいレイヤーにロードする新しいイメージを作成し、すべての親のレイヤーを参照します。

言い換えると、つぶすとき、Dockerはビルドによって生成されたすべてのファイルシステムレイヤーを取得し、それらを単一の新しいレイヤーに折りたたみます。

これにより、最小限のコンテナーイメージを作成するプロセスを簡素化できますが、イメージを移動するときにオーバーヘッドがわずかに高くなる可能性があります(押しつぶされたレイヤーはイメージ間で共有できなくなるため)。 Dockerは引き続き個々のレイヤーをキャッシュして、後続のビルドを高速化します。

この機能は、新しく構築されたすべてのレイヤーを単一のレイヤーに押しつぶすことに注意してください。

サイドノート:

Docker 1.13は、--compressフラグを使用してCLIからデーモンに送信されるビルドコンテキストの圧縮もサポートしています。これにより、送信されるデータの量を減らすことにより、リモートデーモンで行われるビルドが高速化されます。

Docker 1.13以降、この機能は実験的であることに注意してください。

61
Farhad Farahi