10 ポイント 投稿者 GN⁺ 2024-01-09 | 1件のコメント | WhatsAppで共有

Docker イメージ探索ツール dive

  • Docker イメージの分析: dive コマンドとイメージのタグ / ID / ダイジェストを使って Docker イメージを分析可能。
  • Docker コマンドとして直接利用: alias を設定することで、dive を Docker コマンドとして直接使用可能。
  • Macbookでのビルド: Docker コンテナエンジンのみをサポートする Macbook でも、dive を使ってイメージのビルドと分析が可能。
  • CI パイプライン統合: CI=true 環境変数を設定することで、UI なしでイメージを分析し、無駄な領域を最小化可能。

基本機能

  • レイヤーごとの Docker イメージ内容表示: 選択したレイヤーの内容と、それ以前のレイヤーを結合した内容を右側で確認可能。
  • 各レイヤーで変更された内容を表示: ファイルツリー内で変更、修正、追加、または削除されたファイルを表示。
  • 「イメージ効率」を推定: イメージに含まれる無駄な領域の量を推定し、効率スコアと無駄になったファイル領域を提供。
  • 高速なビルド / 分析サイクル: dive build -t some-tag . コマンドで Docker イメージをビルドした直後に分析可能。
  • さまざまなイメージソースとコンテナエンジンをサポート: --source オプションでコンテナイメージの取得元を選択可能。

インストール方法

  • Ubuntu/Debian: curlapt を使って dive をインストール。
  • RHEL/Centos: curlrpm を使って dive をインストール。
  • Arch Linux: pacman 経由でインストール可能。
  • Mac: Homebrew または MacPorts を使うか、リリースページから Darwin ビルドをダウンロード。
  • Windows: 最新リリースをダウンロード。
  • Go tools: Go バージョン 1.10 以上が必要で、go get でインストール。
  • Nix/NixOS: nix-env を使ってインストール。
  • Docker: docker pull でイメージを取得し、Docker ソケットファイルを含めて実行。

CI 統合

  • 環境変数 CI=true の設定: UI なしで Docker イメージを分析し、通過 / 失敗を戻り値コードで示す。
  • .dive-ci ファイルによるルール設定: 効率性、無駄な領域の量および比率に応じて通過 / 失敗基準を設定可能。

キーバインド

  • さまざまなキーバインドにより、UI 内でレイヤーおよびファイルツリービューを操作可能。

UI 設定

  • 設定ファイルを通じてさまざまなオプションをカスタマイズし、dive の動作を変更可能。

GN⁺の意見

  • 重要性: dive は Docker イメージのサイズを最適化し、無駄を減らすのに非常に有用なツール。これはクラウドインフラのコスト削減と効率的なリソース管理に貢献しうる。
  • 興味深さ: Docker イメージの各レイヤーを詳細に分析し、変更点を視覚的に確認できる点は、開発者やシステム管理者にとって非常に興味深い機能。
  • 役立つ点: CI/CD パイプラインに dive を統合することで、自動化されたイメージ分析を通じて継続的な品質管理と効率向上を図れる。

1件のコメント

 
GN⁺ 2024-01-09
Hacker Newsの意見
  • Crane と go-containerregistry ライブラリ

    • イメージおよびレイヤー操作では Crane が優れており、これは go-containerregistry ライブラリを基盤としている。
    • 新しいレイヤーの追加、既存イメージのメタデータ(環境変数、ラベル、エントリーポイントなど)の修正が可能。
    • 複数レイヤーを単一レイヤーに「フラット化」したり、イメージを「リベース」(変更内容を新しい/更新されたベースイメージに再適用)したりできる。
    • すべての作業はレジストリ上で直接行われるため Docker は不要(元のイメージ作成時には依然として有用)。
    • Crane の使い方リンク
  • Dive の有用性

    • Dive は Docker イメージの動作方式と、効率的な Dockerfile の書き方を理解するのに非常に有用。
    • ドキュメントを読むのとは異なり、Dockerfile を変更した後に結果のレイヤー構造へどう影響するかを見ることが理解の大きな助けになる。
    • Dive は学習と、正確に何をビルド/デプロイしているのかという確信を育てるうえで不可欠なツール。
    • レイヤー差分の比較に使う Dredge という別のツールもある。
    • Dredge の使い方リンク
  • Dive の隠れた特徴

    • Dive は非常に有用なだけでなく、その作者は優れた開発者で、一緒に働いていてとても楽しい人物でもある。
  • GoLang を使う理由への質問

    • ほとんどのコンテナ/インフラツールが GoLang で書かれている理由への疑問。
    • Docker、Podman、nerdctl、Terraform、Kubernetes などが例として挙げられる。
    • GoLang がこうしたツールの構築に明白な利点をもたらすのかという質問。
  • Dive の実用性

    • Dive を毎月何度も使っており、特定のファイルがレイヤー内に存在するか確認したり、ファイル内容を見たいときに便利。
    • 現在はコンテナを実行したり、ファイル内容を抽出してフォルダをたどる方法で対応している。
  • Google の container-diff ツール

    • container-diff は、システムに対して何をするのか分からないランダムなスクリプトを bash にパイプしているか確認するのに有用。
  • 他の優れた TUI ターミナルツール

    • Dive のほかにも、lazydocker、dry のような優れた TUI ターミナルツールがある。
    • Docker カテゴリ内のツールもある。
    • ターミナルツールリンク
  • Docker が tar アーカイブを使う理由

    • Docker がレイヤー内容のために通常のディレクトリではなく tar アーカイブを使う理由への疑問。
    • このツールは、本来存在しないはずの問題を解決している。
  • Dive の驚くべき効果

    • Dive には何度も大いに助けられ、レイヤーについて多くを学べた。
    • Docker Desktop がその機能を模倣するほど優れている。