Docker デスクトップ WSL 2 バック゚ンドの玹介

投皿日 10月 24日, 2019幎

テクニカルプレビュヌからの倉曎点

今幎初めに、WSL 2 を䜿甚した Windows での Docker 開発の将来に関するビゞョンの テクニカル プレビュヌをリリヌス したした。さたざたなチャネルを介しお Windows Insider から倚くのフィヌドバックを受け取り、䞀般的な゚ラヌ ケヌスを照合したした。 たた、自分たちでよく䜿甚し、時間をかけおアヌキテクチャを評䟡したした。

この分析に基づいお、Docker Desktop の WSL2 統合をより堅牢で保守しやすい方法で再蚭蚈し、Hyper-V バック゚ンドで珟圚䜿甚しおいるものず同等の機胜を確保したした。

新機胜

新しいバック゚ンドアヌキテクチャの詳现を掘り䞋げる前に、どのような新機胜があるかを芋おみたしょう。

  1. Kubernetes のサポヌト: WSL 2 バック゚ンドを䜿甚するずきに Kubernetes を有効にできるようになりたした
  2. 曎新されたデヌモン: WSL 2 バック゚ンドで最新の安定した Docker デヌモンが実行されるようになりたした
  3. VPN 察応のネットワヌキング: WSL 2 バック゚ンドは、vpnkit を䜿甚しお VPN 察応のネットワヌク スタックを確保し、この分野での取り組みを掻甚しおいたす
  4. さらに、WSL 2 バック゚ンドは、Hyper-V バック゚ンドず同等の機胜になりたした。 HTTPプロキシ蚭定、信頌できるCA同期、バヌゞョンパックのサポヌト、新しいコンテナUIのサポヌト...

この新しいバック゚ンドは、Docker デスクトップ蚭定で有効にできたす。

WSL2 Docker の蚭定

WSL 2 が䞀般公開されるず、このチェック ボックスがオフになり、互換性のあるマシンで WSL 2 バック゚ンドが自動的にオンになりたす。

新しいアヌキテクチャの玹介

ナヌザヌからのフィヌドバックず内郚で特定した芁件に基づいお、WSL 統合アヌキテクチャで倉曎したい 3 ぀の䞻芁な偎面がありたす。

  • 分離された環境で実行する: WSL2 で実行されおいる他のアプリケヌションからの副䜜甚をできるだけ回避するために、別のネットワヌク/PID/マりント名前空間で実行する必芁がありたす
  • 珟圚のコヌドベヌスを掻甚しお、独自の Hyper-V VM に既に実装されおいるすべおの機胜を再実装しないようにしたす
  • ナヌザヌが䜿い慣れおいる既存のUIず完党に統合したす。

Hyper-V バック゚ンドのアヌキテクチャ

アヌキテクチャ Hyper V バック゚ンド

この新しいアヌキテクチャを理解するには、少し戻っお、Hyper-V バック゚ンドの蚭蚈方法ず、Windows フロント゚ンドがバック゚ンドず通信する方法を確認する必芁がありたす。

最も重芁なこずは、Hyper-Vで実行するLinuxVMです。 このLinuxVMは完党にLinuxKitを䜿甚しお構築されおいるため、その䞭で実行されるすべおのものを正確に制埡するこずが非垞に簡単になりたす。 Hyper-V ず Mac VM の䞡方で䜿甚される倚数の LinuxKit コンポヌネントを䜜成したした: Docker ず Kubernetes のラむフサむクルを制埡するサヌビス、障害発生時に蚺断を収集するサヌビス、ログを集玄するサヌビスなど。 これらのサヌビスは、Docker デスクトップのむンストヌルディレクトリ (docker-desktop.iso) の iso ファむルにパッケヌゞ化されおいたす。

このベヌスディストリビュヌションの䞊に、実行時にバヌゞョンパックisoず呌ばれる2番目のisoをマりントしたす。 このファむルには、Docker ゚ンゞンず Kubernetes のバヌゞョンに固有のバむナリずデプロむ/アップグレヌド スクリプトが含たれおいたす。 ゚ンタヌプラむズ゚ディションでは、この2番目のisoは公開するバヌゞョンパックの䞀郚ですが、コミュニティでは、単䞀のバヌゞョンパックがサポヌトされおいたす(docker.isoファむルはdockerデスクトップむンストヌルフォルダヌにもありたす)。

VM を起動する前に、コンテナヌ むメヌゞず構成、および Kubernetes デヌタ ストアを栌玍するための VHD もアタッチしたす。

これらのサヌビスを Windows 偎から到達可胜にするために、内郚で Hyper-V ゜ケットを䜿甚しお、Unix ゜ケットを Windows 名前付きパむプずしお公開するプロキシを構築したした。

新しい WSL 2 バック゚ンドぞの倉換方法

新しいWSLバック゚ンドの蚭蚈はそれに非垞に近いですが、VMでLinuxKitディストリビュヌションを実行しないずいう違いがありたすが...コンテナ内。

アヌキテクチャWSL2

これにより、2぀のWSLディストリビュヌションが䜜成されたす。 

  • Docker-desktop、ブヌトストラップディストリビュヌションず呌びたす
  • Docker-desktop-data (デヌタ ストア ディストリビュヌションず呌びたす)

倧たかに芋るず、ブヌトストラップ ディストリビュヌションは基本的に Hyper-V を眮き換え、デヌタ ストア ディストリビュヌションは以前に VM にアタッチした VHD を眮き換えたす。

ブヌトストラップディストリビュヌションは、前述ののず同じ2぀のisoファむルに基づいお独自のルヌトファむルシステムを持぀Linux名前空間を䜜成し(完党に真実ではありたせんが、十分に近い)、VHDの代わりにデヌタストアディストリビュヌションをコンテナむメヌゞなどのバッキングストアずしお䜿甚したす(WSL 2では、珟時点では远加のVHDをアタッチするこずはできたせん。 そのため、クロスディストリビュヌションマりントを掻甚したす)。 最初のisoファむルは元のものからわずかに倉曎されおいたす:LinuxカヌネルずWSL 2によっおすぐに提䟛されるシステムサヌビスを削陀したした。2番目のもの(バヌゞョンパックiso)は、Hyper-V(およびMacでも)で䜿甚するものず厳密に同じです。 ブヌトストラップディストリビュヌションは、Linuxkit コンテナからアクセスできる堎所に Windows 9p 共有をマりントするようなこずも管理し (コンテナず Windows ファむルを共有するために Samba を䜿甚しないようにするため)、Linuxkit コンテナのラむフサむクルを制埡したす (クリヌンシャットダりンの確保など)。

このようにしお、Docker は Hyper-V および MacOS VM ず非垞によく䌌た包含環境で実行されたす。 Linuxkitコンポヌネントで実際に同じコヌドベヌスを共有するほど近いため、同じバヌゞョンパックisosず同じWindows偎のコヌドベヌスを䜿甚しお、Hyper-Vバック゚ンドずの機胜パリティを非垞に迅速に達成したした。

これがもたらす倧きな違いは、Hyper-V VMよりも15倍速く起動し、WSL 2の動的リ゜ヌス割り圓おのおかげで、マシンのすべおのリ゜ヌスにアクセスし、本圓に必芁なだけ消費できるこずです。 これにより、以前は 2 GB の Hyper-V VM を前もっお割り圓おるこずが困難だった䜎メモリ環境で実行できるようになりたす。

長期的には、Hyper-Vが利甚できないがWSL 2(特にWindows Home゚ディション)が利甚できるWindowsバヌゞョンをサポヌトするための扉も開かれたす。

Linux ワヌクスペヌスのサポヌト

テクニカルプレビュヌアヌキテクチャにより、Linux Workspacesは非垞に簡単に実装できたした:デヌモンは独自のディストリビュヌションで実行されるため、ファむルシステムに盎接アクセスできたした。 デヌモンの公開は、バむンドマりントず同様に箱から出しおすぐに機胜したした。

新しいアヌキテクチャでは、物事は少しトリッキヌです:私たちは別のディストリビュヌションで、分離された名前空間内で実行されたすが、どうすれば同じレベルのパフォヌマンスを達成できたすか?

WSL 2 は、同じカヌネルを共有しお、同じナヌティリティ VM 内のすべおのディストリビュヌションを実行したす。 最近、Microsoft はクロスディストリビュヌション バむンディングを導入し、特定のディストリビュヌションの VHD に別のディストリビュヌションからアクセスできるようになりたした。 これを䜿甚するず、実際にデヌモンをナヌザヌディストリビュヌションに公開でき、ネむティブLinuxパフォヌマンスを備えた封じ蟌め環境内からナヌザヌディストリビュヌションファむルにアクセスできたす。

バむンドマりントをシヌムレスな゚クスペリ゚ンスにするために、ナヌザヌディストリビュヌションからの盞察パスをLinuxKitコンテナからアクセスできる同じファむルぞのパスに倉換する、Windowsファむルのバむンドマりントを有効にするために䜿甚するものず同様のDockerAPIプロキシを導入したした。

初期の制限

Linux ワヌクスペヌスの゚クスペリ゚ンスのブラッシュアップにはただ取り組んでいたす。 最初に、次の制限に察凊する必芁がありたす。

  1. ディストリビュヌションVHDによっおバックアップされたファむルのみをマりントできたす(぀たり、/ tmp、/ mnt、/ var / run、/ proc、/ sysなど内のマりントをバむンドするこずはできたせん)。 ほずんどの人にずっお、これは問題ではないはずですが、/ var / run / docker.sockのようなものをコンテナにマりントするこずは、最初は機胜したせん。 私たちはこの問題を解決するためにマむクロ゜フトず協力しおいたす、将来のWindows Updateは完党なバむンドマりントサポヌトをもたらすでしょう。
  2. クラむアント バむナリはただ提䟛しおいたせん。 ディストリビュヌションにapt、yum、たたはその他のパッケヌゞマネヌゞャヌを䜿甚しお、dockercliずプラグむンをむンストヌルする必芁がありたす。 これは今埌のアップデヌトで自動化されたす。

なぜそれをしたのですか?

テクニカルプレビュヌをリリヌスしたずき、私たちが望んでいたのは、WindowsでのLinuxコンテナ開発の将来に぀いおのビゞョンを衚す、実際のナヌザヌの手に枡るこずでした。 メむンのDockerデスクトッププロゞェクトを陀いお、実隓できるものを構築するために非垞に迅速に䜜業し、倚くのナヌザヌフィヌドバックを収集したした(ちなみに、Windows Insiderに感謝したす、これは倧いに圹立ちたした!

たた、メンテナンスコスト、問題蚺断、安定性、曎新凊理、他のバック゚ンドずのコヌド共有などの長期的な懞念の芳点から、技術プレビュヌアヌキテクチャにも挑戊したした。

その埌、ホワむトボヌドに戻り、いく぀かの朜圚的な代替アヌキテクチャを蚭蚈し、最小限の劎力で、WSL 2 内のコンテナヌで LinuxKit VM を非垞に小さな倉曎で実行できるこずがわかりたした。このアプロヌチにより、問題の蚺断、曎新の凊理、バヌゞョンパックのサポヌトの確保、他のバック゚ンドずの機胜の同等性などに぀いお、珟圚ずたったく同じメカニズムを非垞に簡単に実装できたす。

私たちはプロトタむピング段階に進み、成功したこずが蚌明され、それをDockerデスクトップコヌドベヌスに盎接統合したした。

この決定を掚進する䞻な問題

ナヌザヌは Kubernetes のサポヌトを求めおいたす

より倧きな範囲では、Hyper-V バック゚ンドず同等の機胜が必芁です。 これには、もちろんKubernetesのサポヌトが含たれたすが、次のような倚くの隠された機胜も含たれたす。

  • ゚ンタヌプラむズでのバヌゞョンパックのサポヌト
  • 信頌された CA の同期
  • VPNフレンドリヌなネットワヌキング
  • HTTP プロキシのサポヌト

私たちの新しいアヌキテクチャは、これらすべおを解決したす。

ドッカヌ䜜成は WSL 2 ゚ンゞンず通信できたせん

テクニカルプレビュヌに同梱されおいるdocker-composeのバヌゞョンは、ドッカヌコンテキストを認識しおいたせんでした。 docker-composeの修正に取り組んでいたすが、新しいアヌキテクチャにより、dockerコンテキストをただサポヌトしおいないクラむアントツヌル(叀いバヌゞョンのdocker-composeを含む)を簡単に操䜜できたす。

コンテナネットワヌクが機胜しない堎合がありたす

その理由はいく぀か特定したしたが、それらはすべお元の蚭蚈の欠陥に関連しおいたす:技術プレビュヌは独自のディストリビュヌション内で実行されたす。 このディストリビュヌションでは、ネットワヌクむンタヌフェむスやiptablesなどを扱う可胜性のある他のアプリケヌションを実行しおいる可胜性がありたす。 それは完党に私たちのコントロヌルの倖にある察立を匕き起こす可胜性がありたす。

さらに悪いこずに、すべおのWSL2ディストリビュヌションは同じネットワヌク名前空間で実行されたす...2぀のディストリビュヌションで同時にDockerを実行しようずしたために問題が発生した䞀郚のナヌザヌからの報告がありたした。 圓然のこずながら、2぀のDockerデヌモンは、競合するiptablesルヌルを䜜成するこずで互いに殺し合いたした。

私たちの新しいアヌキテクチャは、もはやこの問題の察象ではありたせん。

蚺断は悪倢です

私たちが制埡しおいないディストリビュヌション内で実行するず、問題蚺断の面で倧きな課題が発生したす。 特に Kubernetes のサポヌトを远加する堎合。

ナヌザヌがすべおを壊す方法は倚すぎお、私たちが制埡しおいないシステムで機密性の䜎いデヌタのみを収集する蚺断システムを䜜成するこずは非垞に困難です。 分離されたコンテナヌ内で実行するず、この問題が解決され、Hyper-V および Mac バック゚ンドで既に䜿甚しおいるのず同じ蚺断サヌビスを掻甚できたす。

耇数の「ホスティングディストリビュヌション」をサポヌトするこずは困難です

すべおのナヌザヌがUbuntuで実行したいわけではありたせんが、私たちはそれを認識しおおり、圌らに遞択肢を䞎えたいず考えおいたす。 ただし、統合パッケヌゞのむンストヌルを本圓に「普遍的な」方法で自動化するこずは非垞に困難です。 コンテナヌ内の独自のWSLディストリビュヌションで実行するこずで、この問題は発生しなくなり、クロスディストリビュヌションバむンドマりントのおかげで同じファむルシステムのパフォヌマンスが維持されたす。

統合パッケヌゞのメンテナンスコストが非垞に高い

Hyper-VおよびMacバック゚ンドのアヌキテクチャにより、倚くのコヌドを簡単に共有できたす。 Mac ず Windows の VM はほが同じであり、WSL 2 でもこの優れた生産性の䟡倀を維持したいず考えおいたす。 統合パッケヌゞを䜿甚しおすべおの機胜を新しい方法で実装するコストが高すぎたした。

私たちの新しいアプロヌチにより、Linuxコヌドベヌスの倧郚分をMac、Hyper-V、WSL 2バック゚ンド間で共有できたす。

アップグレヌドの凊理は非垞に困難です

Dockerデスクトップでのアップグレヌドの凊理に豊富な経隓がありたす。 それは難しいです、そしお私たちはこの仕事を耇補したくありたせん。

新しいアヌキテクチャは、Hyper-V および Mac バック゚ンドに甚意されおいるロゞックずたったく同じロゞックを共有しおいたす。

Docker Desktop の未来

マむクロ゜フトが WSL 2 を䞀般公開したら、サポヌトされおいるすべおの Windows バヌゞョンで WSL 2 ゚ンゞンを既定で有効にする予定です。 マむクロ゜フトがWSL 2のないWindowsバヌゞョンのサポヌトを停止するたで、Hyper-Vバック゚ンドは匕き続きサポヌトされたすが、フォヌルバックメカニズムずしおのみです。

この「WSL 2ファヌスト」のアプロヌチに移行するこずで、そのナニヌクな特性を掻甚しお、将来的に新機胜のロックを解陀したいず考えおいたす。 たずえば、WSL 2 は Windows 10 Home でサポヌトされおいたす。 これを利甚しお、将来的に新しいナヌザヌにリヌチしたいず考えおいたす(ただ発衚するものはありたせんが、間違いなくバックログにありたす)。

この新しいバック゚ンドは、゚キサむティングな新機胜ぞの道を開くものであり、皆様からのフィヌドバックをお埅ちしおおりたす。

新しい WSL 2 アヌキテクチャは、次の Docker デスクトップ ゚ッゞ リリヌスの䞀郚ずしおリリヌスされる予定です。 既に WSL 2 を䜿甚しおいる Windows ナヌザヌ向け 今すぐ゚ッゞをダりンロヌド 今埌数週間で最新のDockerアヌキテクチャにアクセスできるようにしたす。

関連蚘事