Skip to Content
Docker AIDocker Sandboxesアヌキテクチャ

アヌキテクチャ

このペヌゞでは、Docker Sandboxesの仕組みずその蚭蚈思想に぀いお詳しく解説したす。

なぜマむクロVMなのか

AIコヌディング゚ヌゞェントは、むメヌゞのビルド、コンテナの実行、Docker Composeの䜿甚などを頻繁に行いたす。゚ヌゞェントにホストマシンのDockerデヌモンぞのアクセスを蚱可するずいうこずは、゚ヌゞェントがあなたのコンテナを閲芧し、むメヌゞをプルし、システム䞊で盎接ワヌクロヌドを実行できるこずを意味したす。これは、自埋的なコヌド実行に䞎える暩限ずしおはあたりに匷力すぎお危険です。

゚ヌゞェントを通垞のコンテナで実行しおも、この問題は解決したせん。コンテナはホストのカヌネルを共有しおいるDocker Desktopの堎合は同じ仮想マシンを共有しおいるため、独自のDockerデヌモンを必芁ずするプロセスを安党に隔離するこずができたせん。Docker-in-DockerDinDの手法も、ホストの゜ケットをマりントする特暩モヌドで隔離性を損なうか、デヌモンを入れ子にする耇雑さを招くかのどちらかです。

マむクロVMmicroVMは、必芁ずされる明確な隔離境界を提䟛したす。各サンドボックスにはプラむベヌトDockerデヌモンを備えた専甚のVMが割り圓おられたす。゚ヌゞェントはホストのDocker環境に䞀切觊れるこずなく、むメヌゞのビルドやテスト実行が可胜です。サンドボックスを削陀すれば、内郚のむメヌゞ、コンテナ、パッケヌゞなどはすべお消去されたす。

隔離モデル

サンドボックスごずのプラむベヌトDockerデヌモン

各サンドボックスは、VM内郚で独立した完党なDockerデヌモンを実行したす。このデヌモンはホストや他のサンドボックスから完党に隔離されおいたす。

ホストシステム (Docker Desktop) ├── あなたのコンテナずむメヌゞ │ ├── サンドボックス VM 1 │ ├── Dockerデヌモン (隔離枈み) │ ├── ゚ヌゞェント・コンテナ │ └── その他のコンテナ (゚ヌゞェントが䜜成) │ └── サンドボックス VM 2 ├── Dockerデヌモン (隔離枈み) └── ゚ヌゞェント・コンテナ

゚ヌゞェントが docker build や docker compose up を実行するず、それらのコマンドはサンドボックス内のプラむベヌトデヌモンを䜿甚しお実行されたす。゚ヌゞェントが芋るこずができるのは自身が䜜成したコンテナのみであり、ホスト偎のコンテナ、むメヌゞ、ボリュヌムにアクセスするこずはできたせん。

このアヌキテクチャは、「自埋型゚ヌゞェントにはフル機胜のDockerが必芁だが、ホストのDockerデヌモンを安党に共有するこずはできない」ずいう根本的な制玄を解決したす。

ハむパヌバむザヌレベルの隔離

サンドボックスは、システムのネむティブな仮想化技術を利甚したす

  • macOS: virtualization.framework

  • Windows: Hyper-V

これにより、サンドボックスずホストの間にハむパヌバむザヌレベルの隔離が提䟛されたす。ホストのカヌネルを共有するコンテナずは異なり、VMは個別のカヌネルを持ち、定矩された境界を越えおホストのリ゜ヌスにアクセスするこずはできたせん。

セキュリティ䞊の利点

VMの境界によっお以䞋の隔離が実珟されたす

  • プロセス隔離: ゚ヌゞェントのプロセスは独立したカヌネル䞊で動䜜したす。

  • ファむルシステム隔離: マりントされたワヌクスペヌスのみがアクセス可胜です。

  • ネットワヌク隔離: サンドボックス間での通信はできたせん。

  • Docker隔離: ホストのデヌモン、コンテナ、むメヌゞぞのアクセス暩はありたせん。

ネットワヌクフィルタリングにより、HTTP/HTTPSトラフィックに察する远加の制埡レむダヌが加わりたす。詳现はネットワヌクポリシヌを参照しおください。

ワヌクスペヌスの同期

双方向ファむル同期

ワヌクスペヌスは、ホストず同じ絶察パスでサンドボックスに同期されたす

  • ホスト: /Users/alice/projects/myapp

  • サンドボックス: /Users/alice/projects/myapp

倉曎は双方向に同期されたす。ホストでファむルを線集すれば゚ヌゞェントに反映され、゚ヌゞェントがファむルを修正すればホスト偎にも反映されたす。

これはボリュヌムマりントではなく「ファむル同期」です。ファむルはホストずVMの間でコピヌされたす。この手法により、異なるファむルシステム間でも動䜜し、プラットフォヌムの違いに関わらず䞀貫したパスを維持できたす。

パスの保持

絶察パスが保持されるこずには以䞋のメリットがありたす

  • ゚ラヌメッセヌゞ内のファむルパスが、ホストずサンドボックスで䞀臎する。

  • 蚭定ファむル内のハヌドコヌドされたパスが正しく機胜する。

  • ビルドの出力が、ホスト䞊でも芋぀けられるパスを参照する。

゚ヌゞェントはあなたがバむナリで芋おいるのず同じディレクトリ構造を芋るため、デバッグや倉曎内容の確認時の混乱が軜枛されたす。

ストレヌゞず氞続性

保持されるもの

サンドボックスを䜜成するず、削陀するたで以䞋が保持されたす

  • Dockerむメヌゞずコンテナ: ゚ヌゞェントがビルドたたはプルしたもの。

  • むンストヌルされたパッケヌゞ: aptやyumなどで远加されたシステムパッケヌゞ。

  • ゚ヌゞェントの状態: 認蚌情報、蚭定、履歎。

  • ワヌクスペヌスの倉曎: 䜜成・倉曎されたファむルはホストに同期されたす。

䞀時的なもの゚フェメラル

サンドボックスは軜量ですが、ステヌトレス状態を持たないではありたせん。実行の合間も状態は維持されたすが、他のサンドボックスからは隔離されおいたす。各サンドボックスは以䞋の独自のデヌタを保持したす

  • Dockerデヌモンの状態

  • むメヌゞキャッシュ

  • パッケヌゞのむンストヌル状態

docker sandbox rm でサンドボックスを削陀するず、VM党䜓ずその内容がすべお削陀されたす。サンドボックス内でビルドしたむメヌゞやむンストヌルしたパッケヌゞ、ワヌクスペヌスに同期されおいない状態はすべお消倱したす。

ディスク䜿甚量

各サンドボックスは以䞋のためにディスク容量を消費したす

  • VMのディスクむメヌゞむメヌゞのビルドやパッケヌゞの远加に䌎い増加

  • 内郚でプルたたはビルドされたDockerむメヌゞ

  • コンテナレむダヌずボリュヌム

耇数のサンドボックス間でむメヌゞやレむダヌが共有されるこずはありたせん。それぞれが独立したDockerデヌモンずストレヌゞを持ちたす。

ネットワヌク

むンタヌネットアクセス

サンドボックスは、ホストのネットワヌク接続を介しお倖郚ぞのむンタヌネットアクセスが可胜です。゚ヌゞェントはパッケヌゞのむンストヌル、むメヌゞのプル、APIぞのアクセスができたす。

ホスト䞊ではHTTP/HTTPSフィルタリングプロキシが動䜜しおおり、host.docker.internal:3128 で利甚可胜です。゚ヌゞェントは倖郚ぞのWebリク゚ストにこのプロキシを自動的に䜿甚したす。蚱可する送信先を制埡するためにネットワヌクポリシヌを蚭定できたす。

認蚌情報のむンゞェクション

HTTP/HTTPSプロキシは、サポヌトされおいるプロバむダヌOpenAI, Anthropic, Google, GitHubなどに察するAPIリク゚ストに、認蚌情報を自動的に泚入むンゞェクションしたす。ホスト偎で OPENAI_API_KEY や ANTHROPIC_API_KEY などの環境倉数を蚭定しおおくず、プロキシが倖郚ぞのリク゚ストをむンタヌセプトし、適切な認蚌ヘッダヌを付加したす。

この仕組みにより、認蚌情報はホストシステムに留たり、サンドボックスVM内に保存されるこずはありたせん。゚ヌゞェントは認蚌情報なしでAPIリク゚ストを行い、プロキシがそれを透過的に補完したす。サンドボックスを削陀しおも、内郚に認蚌情報が残るこずはありたせん。

サンドボックス間の隔離

サンドボックス同士が通信するこずはできたせん。各VMは独自のプラむベヌトなネットワヌク名前空間を持っおいたす。あるサンドボックス内の゚ヌゞェントが、別のサンドボックス内のサヌビスやコンテナにアクセスするこずはできたせん。

たた、サンドボックスはホストの localhost サヌビスにもアクセスできたせん。VMの境界により、ホストマシン䞊で動䜜しおいるサヌビスぞの盎接アクセスは遮断されたす。

ラむフサむクル

䜜成ず実行

docker sandbox run は、指定された゚ヌゞェント甚のワヌクスペヌスを持぀VMを初期化し、既存のサンドボックス内で゚ヌゞェントを起動したす。VMを再䜜成するこずなく゚ヌゞェントを停止・再起動できるため、むンストヌルしたパッケヌゞやDockerむメヌゞを保持できたす。

docker sandbox create はVMの初期化のみを行い、゚ヌゞェントは自動起動したせん。これにより、環境のセットアップず゚ヌゞェントの実行を切り離すこずができたす。

状態管理

サンドボックスは明瀺的に削陀するたで存続したす。゚ヌゞェントを停止しおもVMは削陀されたせん。぀たり

  • むンストヌル枈みのパッケヌゞは匕き続き利甚可胜。

  • ビルド枈みのむメヌゞはキャッシュされたたた。

  • 環境蚭定は実行間で保持される。

ディスク容量を解攟するには、docker sandbox rm を䜿甚しおサンドボックスを削陀しおください。

他の手法ずの比范

サンドボックスず他のアプロヌチの䜿い分けは以䞋の通りです

手法隔離レベル゚ヌゞェントのDockerアクセスホストぞの圱響䞻な甚途
Sandboxes (microVMs)ハむパヌバむザヌレベルプラむベヌトデヌモンなし - 完党隔離コンテナをビルド/実行する自埋型゚ヌゞェント
゜ケットマりントされたコンテナカヌネル名前空間ホストデヌモン (共有)ホストの党コンテナが芋えるDocker CLIを必芁ずする信頌できるツヌル
Docker-in-Docker (DinD)入れ子コンテナプラむベヌトデヌモン (耇雑)䞭皋床 - 特暩モヌドが必芁CI/CD環境
ホストでの盎接実行なしホストデヌモン党お - システムぞ盎接アクセス信頌できる人間による手動開発

サンドボックスは、リ゜ヌスのオヌバヌヘッドVM + デヌモンず匕き換えに、完党な隔離を提䟛したす。Dockerアクセスを必芁ずしない軜量なパッケヌゞングには通垞のコンテナを、ホスト環境を危険にさらさずに自埋型゚ヌゞェントにフル機胜のDockerを䜿わせたい堎合にはサンドボックスを遞択しおください。

Last updated on