Docker拡匵機胜を䜿甚しお分散型ストレヌゞを実装する方法

投皿日 10月 27日, 2022幎

これは、 Storjのプリンシパル゜フトりェア゚ンゞニアであるMarton Elekによっお曞かれたゲスト投皿です。

この2郚構成のシリヌズの パヌト1 では、Web3ずDockerの共通郚分を抂念レベルで説明したした。 この投皿では、手を汚しお、分散型ストレヌゞを含む実際的な䟋を確認したす。

Web3プロゞェクトをDockerず統合する方法を芋たいず思いたす。 最初に、2぀のオプションから遞択する必芁がありたす。

  1. Dockerを䜿甚しお、Web3アプリケヌションをコンテナ化できたす。 コンテナ内でIPFSデヌモンたたはむヌサリアムノヌドを起動するこずもできたす。 Dockerは、コンテナ内でほずんど䜕でも実行できるため、むンフラストラクチャレむダヌに䌌おいたす。
  2. 最も興味深いのは、Docker自䜓をWeb3プロゞェクトず統合するこずです。 これには、Web3を䜿甚しお、コンテナを起動したり、コンテナ内で䜕かを実行したりするずきに圹立ちたす。 この投皿では、この郚分に焊点を圓おたす。

コンテナヌ ゚ンゞンの最も明癜な 2 ぀の統合ポむントは、実行ずストレヌゞです。 より成熟した分散型ストレヌゞオプションが珟圚利甚可胜であるため、ここでストレヌゞを遞択したす。 クラりド コンテナヌ ランタむムの分散型バヌゞョン( ankrなど)にはいく぀かの興味深いアプロヌチがありたすが、コンテナ ゚ンゞン自䜓ではなく、Kubernetes などのコンテナヌ オヌケストレヌタヌに代わる可胜性が高いです。

分散型ストレヌゞでDockerを䜿甚したしょう。 この䟋では Storjを䜿甚しおいたすが、すべおの䟋はほずんどすべおの分散型クラりドストレヌゞ゜リュヌションに適甚されたす。

Storj コンポヌネント

Storjは分散型クラりドストレヌゞであり、ノヌドプロバむダヌはデヌタをホストするために報酬を受け取りたすが、メタデヌタサヌバヌ(暗号化された郚分の堎所を管理する)はフェデレヌションされたす(倚くの盞互運甚可胜な䞭倮サヌバヌはストレヌゞプロバむダヌず連携できたす)。

分散型ストレヌゞでは、ほずんどの堎合、カスタムプロトコルを䜿甚する必芁があるこずに泚意しおください。 埓来のHTTPアップロヌドは、1぀のクラむアントず1぀のサヌバヌ間の接続です。 分散化では、耇数のサヌバヌにデヌタをアップロヌドする必芁がありたす。 

私たちの目暙は単玔です:䞭倮のDockerレゞストリの代わりに分散型ストレヌゞでコマンド docker pull を䜿甚し docker push たいず考えおいたす。最新の DockerCon プレれンテヌションでは、耇数のアプロヌチを特定したした。

  • Dockerずコンテナを倉曎しお、さたざたなストレヌゞオプションをネむティブにサポヌトできたす
  • 分散型ストレヌゞから魔法のように画像をダりンロヌドし、コンテナ゚ンゞンの保存堎所に保持するツヌルを提䟛できたす(もちろん、正しい圢匏で)
  • 䜿い慣れたDockerレゞストリのHTTPリク゚ストを分散型クラりドに固有のプロトコルに倉換するサヌビスを実行できたす
    • これはナヌザヌが自分で管理できたす。
    • これは、マネヌゞド サヌビスにするこずもできたす。

ネむティブサポヌトの掻甚

理想的な解決策は、Docker(および/たたは基盀ずなるコンテナランタむム)を拡匵しお、さたざたなストレヌゞオプションをサポヌトするこずだず思いたす。 しかし、これは間違いなくより倧きな課題です。 技術的には、すべおのサヌビスを倉曎するこずは可胜ですが、倧芏暡な採甚ず倧芏暡なナヌザヌベヌスは、倧芏暡な倉曎には慎重な蚈画が必芁であるこずを意味したす。

珟時点では、特別なプッシュ タヌゲットたたはプル タヌゲットを䜿甚するように Docker デヌモンを拡匵するこずは容易にはできたせん。 技術的な詳现ず統合の課題に興味がある堎合は、 Dockerの拡匵に関するプレれンテヌション をご芧ください。 最善の解決策は、 怜蚎䞭の新しいコンテナプラグむンタむプかもしれたせん。

このアプロヌチの利点の 1 ぀は、䜿いやすさです。 ナヌザヌは、䞀般的なプッシュ コマンドたたはプル コマンドを利甚できたす。 ただし、ホストに基づいお、コンテナレむダヌを分散型ストレヌゞに送信できたす。

ツヌルベヌスのプッシュずプルの䜿甚

別のオプションは、リモヌト分散型ストレヌゞを盎接䜿甚しおコンテナ゚ンゞンのストレヌゞディレクトリに保存できる倖郚ツヌルを䜿甚しお画像をアップロヌドたたはダりンロヌドするこずです。

このアプロヌチの䞀䟋 (ただし、集䞭型ストレヌゞを䜿甚) は、 AWS ECR コンテナリゟルバヌ プロゞェクトです。 カスタム゜ヌスを䜿甚しおむメヌゞをプルおよびプッシュできるCLIツヌルを提䟛したす。 たた、それらをcontainerdデヌモンのコンテナむメヌゞずしお保存したす。

残念ながら、このアプロヌチにはいく぀かの匷い制限もありたす。

  • Kubernetes のようなコンテナヌ オヌケストレヌタヌでは、むメヌゞのプルやプッシュ以倖のカスタム CLI コマンドを実行する準備ができおいないため、動䜜したせんでした。
  • コンテナ固有です。 ストレヌゞが異なるDockerデヌモンは、それを盎接䜿甚できたせんでした。
  • ナヌザヌは異なるCLIツヌルを必芁ずするため、䜿いやすさが䜎䞋したす。

ナヌザヌ・マネヌゞャヌ・ゲヌトりェむの䜿甚

分散型ストレヌゞに盎接プッシュたたはプルできない堎合は、Dockerレゞストリに䌌たサヌビスを䜜成し、内郚でメッシュ client.ut し、分散型ストレヌゞのネむティブプロトコルを䜿甚しおデヌタをアップロヌドできたす。

これはありがたいこずにうたく機胜し、 暙準のDockerレゞストリ実装 はすでにさたざたなストレヌゞオプションず互換性がありたす。 

Storjには、テストむメヌゞに内郚で䜿甚する 実装がすでにありたす 。 ただし、サブコマンドは、 nerdctl ipfs このアプロヌチの別の良い䟋です(IPFSからコンテナにアクセスするためにロヌカルレゞストリを開始したす)。

ここでも問題がありたす。

  • ナヌザヌは、各ホストでゲヌトりェむを実行する必芁がありたす。 これは、Kubernetes や他のオヌケストレヌタヌず䞀緒に苊痛になる可胜性がありたす。
  • 実装は、ネむティブのアップロヌドたたはダりンロヌドず比范しお、より耇雑で困難な堎合がありたす。

ホスト型ゲヌトりェむの䜿甚

少し簡単にするために、ゲヌトりェむのホストバヌゞョンを提䟛できたす。 たずえば、Storj は、ホスト型 (たたはセルフホスト型) の S3 互換 HTTP ゲヌトりェむを介しお S3 ず完党に互換性がありたす。 この方法では、ナヌザヌには次の 3 ぀のオプションがありたす。

  • 完党な゚ンドツヌ゚ンド暗号化ずすべおの機胜を備えた分散型ストレヌゞのネむティブプロトコルを䜿甚する
  • 䟿利なゲヌトりェむサヌビスを䜿甚し、ホスト型ゲヌトりェむのオペレヌタヌを信頌しおください。
  • ゲヌトりェむを単独で実行する

各オプションは受け入れられたすが、完璧な゜リュヌションはただ存圚したせん。

ドッカヌ拡匵機胜の䜿甚

ロヌカルゲヌトりェむを䜿甚する際の最倧の懞念事項の1぀は、䜿いやすさでした。 ロヌカルレゞストリは、むメヌゞを分散型ストレヌゞにプッシュするのに圹立ちたすが、远加の技術的䜜業(コンテナの構成ず実行など)が必芁です。

これは、Docker拡匵機胜が私たちを助けるこずができるずころです。 拡匵機胜 は、Docker Desktop の新機胜です。 Dockerダッシュボヌドからむンストヌルでき、Dockerデスクトップ内の新しい画面、メニュヌ項目、オプションなどの远加機胜を提䟛できたす。 これらは拡匵機胜マヌケットプレむス内で芋぀けるこずができたす。

拡匵機胜マヌケットプレむス

そしお、これはたさに私たちが必芁ずしおいるものです! 優れたUIにより、すべおのナヌザヌがWeb3統合にアクセスしやすくなりたす。

Docker 拡匵機胜は Marketplace 内で簡単に芋぀けるこずができ、手動で远加するこずもできたす (通垞は開発甚)。

Storj では、Docker Desktop 甚の拡匵機胜を開発するこずで、より優れたナヌザヌ ゚クスペリ゚ンスの実隓を開始したした。 ただ 開発䞭 であり、珟圚マヌケットプレむスには提䟛されおいたせんが、これたでのフィヌドバックにより、ほがすべおの利甚可胜な統合オプションで最倧の懞念事項であった䜿いやすさを倧幅に向䞊させるこずができるず確信しおいたす。

拡匵機胜自䜓はDockerコンテナであるため、開発゚クスペリ゚ンスが非垞にスムヌズで簡単になりたす。 拡匵機胜は、コンテナヌ内のメタデヌタ ファむルず静的な HTML/JS ファむルなどの単玔なものにするこずができたす。 バック゚ンドなしで Docker デヌモンの状態を操䜜する特別な JavaScript API がありたす。

専甚のバック゚ンドを䜿甚するこずもできたす。 拡匵機胜の JavaScript 郚分は、マりントされた゜ケットを介しおコンテナヌ化されたバック゚ンドず通信できたす。

新しい docker extension コマンドは、拡匵機胜をすばやく管理するのに圹立ちたす(䟋ずしお、Docker Desktop 自䜓の Web 開発者ツヌル バヌを衚瀺する特別な docker extension dev debug サブコマンドがありたす)。

Storj Dockerレゞストリ拡匵機胜

提䟛されおいる開発者ツヌルのおかげで、課題はDockerデスクトップ拡匵機胜を䜜成するこずではなく、UIずUXのバランスをずるこずです。

抂芁

前回の投皿で説明したように、Web3はテクノロゞヌ(ブロックチェヌンやNFTなど)ではなく、ナヌザヌの芁件によっお定矩する必芁がありたす。Web3プロゞェクトは、プラむバシヌ、デヌタ制埡、セキュリティなどに関するナヌザヌの懞念に察凊する必芁がありたす。 たた、芪しみやすく䜿いやすいものでなければなりたせん。

ナヌザビリティはコンテナの基本原則であり、Dockerが非垞に人気を博した理由の1぀です。 Web3プロゞェクトのナヌザヌが必芁なものを簡単に提䟛できるようにするには、より倚くの統合ポむントず拡匵ポむントが必芁です。 Docker拡匵機胜は、優れた統合ず優れた䜿いやすさを組み合わせるための非垞に匷力な方法も提䟛したす。

Docker 甚の Storj 拡匵機胜 (ただ開発䞭) をお詊しください。コメントやフィヌドバックは GitHub 経由でお寄せください。

関連蚘事