コンテナの操作は、多くのユーザーや開発者にとって日常的なタスクです。コンテナ開発者は、コンテナイメージを頻繁に(再)ビルドする必要があることがよくあります。コンテナを開発する場合、イメージのサイズを縮小することを考えたことはありますか?画像を小さくすると、いくつかの利点があります。ダウンロード時に必要な帯域幅が少なくなり、クラウド環境で実行する場合のコストが節約されます。また、Fedora CoreOS、IoT、Silverblue ではコンテナ ワークフローに大きく依存しているため、より小さなコンテナ イメージを使用すると、システム全体のパフォーマンスが向上します。この記事では、コンテナ イメージのサイズを縮小するためのヒントをいくつか紹介します。
道具以下の例で使用されるホスト オペレーティング システムは Fedora Linux 33 です。例では、Podman 3.1.0 と Buildah 1.2.0 を使用します。 Podman と Buildah は、ほとんどの Fedora Linux バリアントにプリインストールされています。 Podman と Buildah がインストールされていない場合は、次のコマンドを使用してインストールできます。
タスク基本的な例から始めましょう。次の要件を満たす Web コンテナーを構築します。
次の手順は、より複雑な画像にも適用されます。 設定まず、プロジェクト ディレクトリを作成します。このディレクトリには、Web サイトとコンテナ ファイルが含まれます。
シンプルなログインページを作成します。このデモでは、次の HTML を index.html ファイルにコピーできます。
この時点で、上記の index.html ファイルをブラウザでテストすることを選択できます。
最後に、コンテナ ファイルを作成します。このファイルの名前は Dockerfile または Containerfile にすることができます。
これで、次のファイル システム レイアウトを持つプロジェクト ディレクトリが作成されます。
建てる次にイメージをビルドします。次の各段階では、画像のサイズを縮小するための改善レイヤーが追加されます。最終的にはイメージのコレクションが作成されますが、Containerfile は 1 つだけになります。 ステージ0: 基本的なコンテナイメージ新しいイメージは非常にシンプルで、必須の手順のみが含まれます。 Containerfile に次の内容を追加します。
上記のファイルには、各行の機能を説明するコメントがいくつかあります。より詳細な手順:
次のコマンドを実行して、プロジェクト ディレクトリから新しいイメージを作成します。
イメージのプロパティを表示するには、次のコマンドを使用します。画像のサイズ(467 MB)に注意してください。
上記の例に示されている画像は現在 467 MB のスペースを占有しています。残りの段階では画像のサイズが大幅に縮小されます。ただし、まずはイメージが期待どおりに動作することを確認してください。 コンテナを起動するには、次のコマンドを入力します。
コンテナを一覧表示するには、次のように入力します。
上記のコンテナーは実行されており、ポート 46191 でリッスンしています。ホスト オペレーティング システムで実行されている Web ブラウザーから localhost:46191 にアクセスすると、Web ページがレンダリングされます。
フェーズ1: キャッシュをクリアし、コンテナから残りのコンテンツを削除するコンテナ イメージのサイズを最適化するには、まず「クリーンアップ」を実行する必要があります。これにより、インストールとパッケージの残りがすべて除去されます。このプロセスに具体的に何が含まれるかは、コンテナーによって異なります。上記の例では、Containerfile を編集して次の行を追加します。
変更された Containerfile をビルドして、イメージ サイズを大幅に削減します (この例では 237 MB)。
フェーズ2: ドキュメントと不要な依存関係を削除するインストール中に、いくつかの弱い依存関係やドキュメントを含む多くのパッケージを削除するよう提案されます。これらは通常、コンテナ内では必要ないので削除できます。 dnf コマンドには、弱い依存関係やドキュメントを含める必要がないことを示すオプションがあります。 Containerfile を再度編集し、dnf install 行にオプションを追加して、アーカイブと弱い依存関係を削除します。
上記の変更された Containerfile をビルドすると、イメージが小さくなります (231 MB)。
フェーズ3: より小さなコンテナベースイメージの使用前の段階を組み合わせることで、サンプル画像のサイズが半分に縮小されました。しかし、画像サイズをさらに縮小する方法はまだいくつかあります。ベースイメージ registry.fedoraproject.org/fedora:33 はユニバーサルです。これは、多くの人が Fedora Linux コンテナにプリインストールしたいと思うパッケージのセットを提供します。ただし、一般的な Fedora Linux ベース イメージで提供されるパッケージでは、通常、さらに多くのものが必要になります。 Fedora プロジェクトでは、基本パッケージのみから始めて、必要なものだけを追加して全体のイメージ サイズを小さくしたい人向けに fedora-minimal イメージも提供しています。 次のように、podman イメージ検索を使用して fedora-minimal イメージを見つけます。
fedora-minimal ベースイメージには DNF が含まれておらず、Python を必要としない小さな microDNF が採用されています。 registry.fedoraproject.org/fedora:33 が registry.fedoraproject.org/fedora-minimal:33 に置き換えられる場合は、microdnf コマンドを使用して dnf を置き換える必要があります。
fedora-minimal を使用して再構築した後のイメージ サイズは次のとおりです (169 MB)。
初期イメージサイズは 467 MB です。上記の各段階で説明した方法を組み合わせて再構築すると、最終的な画像サイズは 169 MB になります。最終的な合計イメージ サイズは、元のベース イメージよりも 182 MB 小さくなります。 コンテナをゼロから構築する前のコンテンツでは、コンテナ ファイルと Podman を使用して新しいイメージを構築します。最後にもう 1 つ、Buildah を使用してコンテナーを最初から構築する方法を紹介します。 Podman は Buildah と同じライブラリを使用してコンテナを構築します。しかし、Buildah は純粋なビルド ツールと見なされます。 Podman は Docker を置き換えるために設計されています。 Buildah を使用して最初から構築されたコンテナーは空であり、何も入っていません。すべてをコンテナの外部からインストールまたはコピーする必要があります。幸いなことに、Buildah の使用は非常に簡単です。以下は、イメージを最初から構築する小さな Bash スクリプトです。このスクリプトを実行するだけでなく、ターミナルでスクリプト内のコマンドを 1 つずつ実行して、各ステップで何が行われるかをよりよく理解することもできます。
あるいは、上記のスクリプトを Buildah に渡してイメージをビルドすることもできます。ルート権限は必要ないことにご注意ください。
最終画像はわずか 155 MB です。攻撃対象領域も縮小されます。最終イメージには DNF (または microDNF) もインストールされません。 結論はより小さなコンテナ イメージを構築することには多くの利点があります。必要な帯域幅、ディスク使用量、攻撃対象領域を削減すると、画像の品質が向上します。少し変更するだけで、画像のサイズを簡単に縮小できます。結果のイメージの機能を変えずに、多くの変更を加えることができます。 必要なバイナリと構成ファイルのみを保存することで、非常に小さなイメージを構築することも可能です。 |
<<: Kafka のコアコンセプトを図解で解説しているので、一目で理解できます。
最近、Weiboマーケティングに注目しています。ある人によると、1万人のファンは雑誌に相当し、10万...
[[380736]]この記事はWeChatの公開アカウント「Full-Stack Coder Por...
改良された Baidu Webmaster プラットフォームがリリースされました。インターフェースの...
現在までに、クラウド サービスは 10 年以上の開発の歴史を持っています。当初の IT サービス モ...
概要以前、在庫管理システムに参加したことがあります。ビジネスの複雑さのため、それをサポートするために...
友人から、SEO を始めるにはどうしたらいいかとよく聞かれます。私は通常、外部リンクを投稿したり、友...
数か月にわたる準備を経て、Dianping はプラットフォーム (developer.dianpin...
2009年から運営しているアメリカのVPS業者servercheapが、シカゴデータセンター(cor...
近年、SEO ウェブサイトの発展の勢いは非常に速く、さまざまな新しい SEO ウェブサイトが目まぐる...
[51CTO.comより]最近、中国機械プレス華章公司、51CTO、Neusoftは共同で「紅湖クラ...
ウェブサイトが成功したいのであれば、当然、充実したコンテンツが欠かせません。eコマースプロジェクトを...
【1】パブリックプラットフォームの名前は、WeChatアカウントの位置付けに関連しています。まず、起...
[[228664]]ハイブリッド クラウドを導入すると、組織のセキュリティ体制が弱まるのではなく、強...
この世に愛とは何でしょう?それは、生死を問わず人々を結びつけるものです!すべては「愛」という言葉から...
マルチアクセス エッジ コンピューティング (MEC) は、モバイル エッジ コンピューティングとも...