Davit - Apple Containers向けネイティブmacOS UI
(davit.app)- Davitは、Apple silicon MacでAppleのcontainerプラットフォーム上のLinuxコンテナを実行・管理するネイティブmacOSアプリで、Docker Desktopなしで利用可能
- Appleのオープンソース containerデーモン とXPCで直接通信し、CLIと同じ経路を使うため、Electron・Webビュー・独自バックグラウンドエージェントを持たない
- コンテナの起動・停止、ログのストリーミング、ターミナル接続、ファイル探索、Dockerfileビルド、Compose取り込みまでを1つのアプリで処理
- 無料のオープンソースMITライセンスアプリとして提供され、Apple Developer IDによる署名と公証が行われており、macOS 15以降のApple silicon Mac が必要
- Docker Desktopと異なり、コンテナごとの軽量VMを使用し、実行中のコンテナがないときはプラットフォームのバックグラウンドサービスは約 25MB 程度でアイドル状態になる
Davitの目的と動作環境
- DavitはAppleのcontainerプラットフォーム向けの完全ネイティブなmacOSアプリ
- Apple siliconでLinuxコンテナを実行し、Docker Desktopは不要
- 無料のオープンソースで、MITライセンス で提供
- アプリはApple Developer IDで署名・公証済み
- 要件は、macOS 15以降 を実行するApple silicon Mac
- インストールはリリースから取得するか、Homebrewで可能
brew install wouterdebie/tap/davit
Apple containerデーモンと直接通信
- DavitはAppleのオープンソース container デーモンと XPC で直接通信
- この経路は
containerCLIが使用するものと同じ通信経路 - Electron、Webビュー、独自バックグラウンドエージェントは使用しない
コンテナ管理機能
- ダッシュボードでは、実行中のすべてのコンテナのサービス、ディスク使用量、リアルタイムCPUを表示
- コンテナ一覧では、各行で状態を確認してそのまま操作可能
- 起動、停止、再起動、削除
- リアルタイム CPU
- メモリ
- IP
- コンテナごとの画面では、実行状態を把握するための機能も提供
- followおよびbootモード付きの ストリーミングログ
- リアルタイム状態チャート
- 生の設定確認
- 実行中のコンテナには、ネイティブAPIで直接ターミナルを開ける
- TerminalまたはiTermでインタラクティブシェルを開ける
- CLIは不要
イミュータブルコンテナの編集とファイルアクセス
- コンテナは イミュータブル であるため、Davitは既存の設定をもとに新しいコンテナを事前入力して再作成できるようにする
- 新しいコンテナ設定には、イメージのentrypointとenvを除く既存設定が反映される
- ポート、環境変数、マウント、リソースをすばやく変更するフローに最適化
- アプリ内で実行中コンテナのファイルシステムを探索可能
- フォルダ移動
- Macへファイルをダウンロード
- ファイルをアップロード
- ファイルを削除
- ファイル操作はネイティブAPIで処理され、
docker cpコマンドは不要
Compose取り込みとDockerfileビルド
- Davitは
docker-compose.ymlを開いて、作成されるリソースを先に表示- 依存関係順のサービス
- ボリューム
- ネットワーク
- サービスごとの対応CLIコマンド
- 未対応項目に対する警告
- Appleプラットフォームにはネイティブcomposeがないため、Davitがスタックを直接オーケストレーションする
- Compose取り込みはサポートされるサブセットを対象とする
- サポート: image, ports, environment, named/bind volumes, networks, resource limits, command, user, working_dir
- 警告対象の例:
restart:,healthcheck:,build:
- Dockerfileビルドは Images → Build Image で可能
- コンテキストフォルダとDockerfileを選択
- タグとbuild argsを設定
- DavitがAppleのBuildKitベースビルダーを直接起動し、必要に応じて開始する
- 現在のプラットフォーム制限もある
- 16KiBを超えるDockerfileは拒否される
- これはupstreamの apple/container bug に関連
- ビルドコンテキストは
/tmp配下に置けない
イメージ、ボリューム、ネットワーク、レジストリ
- Davitはイメージ関連の操作をサポート
- 進捗を見ながらpull
- イメージからコンテナを実行
- タグ付け
- prune
- ボリュームとネットワークの操作も提供
- サイズ指定付きボリュームの作成
- カスタムサブネットの作成
- 削除前に使用中の項目を確認
- レジストリログインは Settings → Registries で処理
- Docker Hub
- ghcr.io
- quay.io
- 任意のOCIレジストリ
- 資格情報は保存前にレジストリで検証される
- 検証済み資格情報はmacOSログインキーチェーンに保存され、
containerCLIと共有される - Docker Hubではパスワードの代わりにアクセストークンが必要
プラットフォーム設定と自動インストール
- Davitはアプリ内でプラットフォーム設定を編集可能
- 新規コンテナのデフォルトCPU/メモリ
- レジストリ
- DNS
- ビルダーリソース
- 設定はプラットフォーム自身の設定ローダーで検証され、クリーンな TOML override として保存される
- Apple containerプラットフォームがインストールされていない場合、DavitがAppleの署名済みインストーラをダウンロードして検証し、ユーザーLibraryにインストールする
- インストール時に管理者権限は不要
- 必要であれば、
containerCLIをシェルに追加することも可能
アプリ実装と使い始めの流れ
- Davitは全体が SwiftUI で実装されている
- メニューバーのクイックアクションを提供
- Dockアイコンはユーザーが望むときだけ表示可能
- リアルタイムチャート描画のためにブラウザを起動しない
- 開始手順の例は以下の通り
- Releases からインストールするか、Homebrewでインストール
- 初回起動時、プラットフォームがなければDavitがインストール
- Images → Pull Image で
nginxdemos/helloをpull - イメージから実行するか、Containers → Run Container を使用
- ホスト
8088をコンテナ80にマッピング - コンテナの Ports 行で Open in Browser を押すか、
localhost:8088にアクセス - 実行中コンテナでCPU、メモリ、ディスク、ログ、ファイル、ターミナル、Edit & Recreate機能を確認
Docker DesktopおよびOrbStackとの違い
- DavitはAppleのエンジンを使用
- 各コンテナはApple Virtualization frameworkベースの独自の軽量VMで動作
- コンテナごとのIPアドレスを持つ
- Apple silicon向けに最適化
- OCIイメージを使用
- Docker Hub、ghcr.io、quay.io、または任意のレジストリからpull可能
- プライベートイメージもレジストリログインで利用可能
- Appleのクライアントライブラリをリンクし、XPCで直接通信
- ソケットshimなし
- ライセンス契約なし
- アカウント不要
- アプリバンドルは 17MB
- Electronなし
- バンドルされたVMイメージなし
- 独自バックグラウンドサービスなし
- OrbStackとは志向が異なる
- OrbStackは独自のDocker互換仮想化レイヤーを持つ商用アプリ
- DavitはApple containerプラットフォーム上の無料オープンソースUI
- Davitはコンテナがないとき常駐項目がなく、コンテナごとのIPとブリッジネットワークを使い、コンテナ間の分離がより強い
- OrbStackはdrop-in
dockerCLI/API互換性と、より広いツール対応で優れる - どちらも標準OCIイメージを実行する
メモリ、DNS、安全性
- メモリ構成は、常時起動する複数GiBのLinux VMを持たない方式
- Docker Desktopはコンテナ実行有無に関係なく大きなVMを1つ維持するが、Appleプラットフォームはコンテナごとの軽量VMを起動し、コンテナ停止時に終了する
- 実行中のコンテナがないとき、プラットフォームのバックグラウンドサービスは約 25MB でアイドル状態
- Davit自体はElectronではなくネイティブSwiftUIアプリであり、メモリ使用量の大半は共有macOSフレームワークメモリ
- コンテナ名でMacからアクセスするには、プラットフォームのローカルDNSドメインを使える
sudo container system dns create testを一度実行するか、独自ドメインを使う- Settings → Platform → DNS でデフォルトドメインとして設定
webコンテナはMac上でweb.testとして応答する
- すべてのコンテナは固有のIPを持ち、IPはNetworkセクションに表示される
- ゲスト内で Avahi を実行すれば、
.localmDNSエイリアスをブロードキャストできる - 各リリースはApple Developer IDで署名・公証されており、Gatekeeperの警告なしで開ける
- アプリはオープンソースのMITライセンスで、直接読んだりビルドしたりできる
- DavitはローカルのcontainerデーモンとGitHubのアップデート確認にのみ通信する
1件のコメント
Hacker News のコメント
AI時代における自分の最高の戦略は、何もしないこと
似たようなアイデアを思いつき、バイブコーディングで作れそうだと思ったが、誰かがもっと関心を持って先に作るだろうと考えていて、実際その通りだった
アプリは良さそうで、試すのが楽しみ
無料のアイデアとしては、エージェントを仮想マシンの中に閉じ込め、仮想マシンの外からハーネスで指示を送り、中にインストールされたエージェント群を制御したい。理想的には、ホスト側に Codex/Claude のようなものがインストールされていない状態にしたい
さらに面白い方向性は、仮想マシン内に複数のユーザーアカウントを作り、ユーザーごとにファイルシステムとネットワークポリシーを制限すること。そうすれば開発エージェント、QAエージェントなどがそれぞれ異なる作業ビューを持つようになり、追加の自動化のための強力な基盤レイヤーになり得る
当然、DB、キュー、外部ボリュームのようなさまざまなリソースを仮想マシンに「接続」して、エージェントが権限ベースで使えるようにできるべき
https://GitHub.com/instavm/coderunner
透明性のために言うと、ここにいくつか PR を送ったことがある
https://github.com/webcoyote/sandvault
20代後半か30代前半ごろから、余暇に開発するのをほぼ完全にやめた。コーディング自体から得ていた楽しさがすっかり消えたから。実のところ、もともとそこまで好きだったわけでもなく、時間を使う価値があるかどうかの判断が本当に下手だっただけ
あったらいいプログラムやスクリプトを思いついても、週に数分を節約するためにプログラムを作る回収時間を計算する xkcd の表のように、ほとんどは「かけた労力に対して見返りが合わなかった」。あるいは必須ではないが、あれば興味深い・楽しい程度のもので、実際に作るには膨大な時間がかかるため、まったく割に合わなかった
誰かが自分の欲しかったものを作って公開してくれればよし、そうでなければ仕方ない、という感じだった
LLM がもたらした大きな変化は、今では小さなスクリプトのようなものを数分、数セントから数ドル程度で出せるようになったこと。長く寝かせていた極めてニッチなアイデアをまた引っ張り出している
以前なら見慣れない API やドキュメントを漁るだけで週末が何度か潰れたようなことも、今では30分以内にできるか、少なくともそれが不可能なのか、面倒すぎて永久に捨てるべきものなのかを、数時間ではなく数分で判断できる
中〜大規模のオープンモデルを動かすのは好きだが、それらが暴走しないと信じることはできないので作った。近いうちに共有する予定
仮想マシンに Claude をインストールして SSH ターミナルで接続すればいい、という程度に単純なものではないかと思う。GUI が必要なら VSCode の Remote SSH 拡張を使えば、ファイルブラウザ UI のようなものも得られる
おそらく VSCode の Claude や他のチャット拡張も、仮想マシン内にインストールできると思う
このプロジェクト自体より目立ったのは、多くの人が特にここ1年ほど予見できていた現象が、目に見えて加速していること。今や人々は、同じアイデアの自分版を以前よりはるかに速く作れる
10分ほど探してみると、似た Swift プロジェクトがいくつも見つかり、その大半はできてから数週間か数か月しか経っていない
https://github.com/tdeverx/contained-app
https://github.com/nico81/iContainer
https://github.com/wouterdebie/davit
https://github.com/Augani/dory
https://github.com/tofa84/berth
https://github.com/erdaltoprak/ContainerUtility
https://github.com/andrew-waters/orchard
GitHub のスターがさらに少ないもの、コマンドライン専用のもの、Swift ではないものまで含めればもっと多かったが、要点はこういうこと
人々はますます、自分が欲しいソフトウェアの自分版を自分で作れるようになる。そうなると、他人が作ったソフトウェアの価値は下がる。超パーソナライズドソフトウェアの時代が来ている
以前は、ウェブサイトの完成度やいくつかの表面的な要素から、こうしたものに注がれた労力を推し量ることができた。今ではそのあたりは LLM で簡単に済む
同じように、時間がたって振り返ると、Kickstarter が残した最大の影響の一つは、3分間のピッチ動画が攻撃的なほど進化し、洗練されたことだった
それが実際に、深く考え抜かれた実装やロードマップ、本物の推進力につながっているのかは分からない
本当に堅実なアプリに見える。17MBで、ContainerAPIClient ライブラリを直接使っている点が気に入った。
3日間でコミット28件、Swift 5,015行、すべてのコミットに「Co-Authored-By: Claude Fable 5」が付いている。
署名と公証がされているのも良い。インストールしてみると、初回起動時に必要なコンテナプラットフォームのコンポーネントをダウンロードした。
提案するとしたら、サイトに入門チュートリアルを追加して、試せるイメージを1つ推奨し、そのイメージの実行方法と何ができるかをスクリーンショットや無音動画で見せると良さそう。
イメージ作成ダイアログは「nginx:latest」を提案するが、入門用デモとしてはあまり良くない。
nginx:latest は配管が動いていることは示すが、Apple Containers が Docker Desktop や OrbStack と比べてどこが違って感じられるのかはあまり示さない。
小さなアプリにボリューム、ポートマッピング、簡単なリビルドループを付けた例なら、価値がずっと分かりやすく見えそう。
は!私たちも同じものを作ったみたいです: https://container-ui.fly.dev/
あれだけ大量のトークンを燃やさなければよかった、という気がしてきた。
すっきりして見えますね。結局、私たちはみんな同じものを作っているんですね ><
OrbStack は2年近く気に入って使ってきた。
統合がよくできていて高速で、docker コマンド互換なので、自分にはお金を払う価値があった。
それでもこれも一度試してみるつもり。
OrbStack の強みは、すべてのコンテナが1つの Linux 仮想マシン内で動き、仮想マシン境界の両側で多くの最適化を行う点にある。macOS 側のディスク容量を大きく節約するスパースイメージファイルの使用も含まれる。
macOS でコンテナを4〜5個以上動かすと、OrbStack の性能とリソース使用量削減の効果が急速に大きくなる。
本当に良い。ランタイムをダウンロードして nginx:latest を実行するのが完璧に動いた。
GitHub で下へスクロールしたときに Claude がコントリビューターとして見えると、そのアプリは良さそうだというサインになりつつある気がする。ネイティブ感があり、Electron ではない、というように。
Apple が Apple Containers に docker API 互換性を追加してくれるといいのに。
ポートフォワーディングやホストボリュームのようなものはない。実際には Mac で buildkit を動かすことに焦点が当たっている。
ただし docker CLI と buildx とは完全に統合されている。
https://github.com/cpuguy83/crucible
機能も良いし、小さな ネイティブ SwiftUI アプリである点も気に入った。
最近、Apple コンテナをエージェント型コーディングに使う記事 [1] を書き、先ほど Davit に言及するよう更新した。個人プロジェクト用としては、自宅の2台の Mac では Docker より Apple コンテナを使う方をずっと好んでいる。
[1] https://open.substack.com/pub/marklwatson/p/running-opencode...
OrbStack と比べるとどうなのか? Apple Containers は開発者体験の面で体感できる何かを提供しているのか? 自分の利用基準では、OrbStack の実装もすでに電光石火のように速く感じる。
数日前に自分が作った似たバージョンを投稿したが、反応はほとんどなかった。
興味のある人のために言うと、メニューバーアプリで コンテナ、マシン、レジストリをサポートしている。
https://news.ycombinator.com/item?id=48789503
https://github.com/erdaltoprak/ContainerUtility