Introduction
WSL2を調べていて、WSL2はLinuxコンテナーを実行できない、と勘違いしてしまった。
今は昔、WSL1はLinuxコンテナーを実行できなかった。
今は、WSL2はLinuxコンテナーを実行できるようになった。
What to do?
- Windows 10(20H1)にWSL2をインストール
- Docker Desktop for Windowsをインストール
- Windows StoreからUbuntu-20.04をダウンロード
- WSL2上で動いているUbuntu-20.04でLinuxコンテナーをdocker-composeでビルド&実行
調べてみた(1)
2017年時点の話。
WSL1ではLinuxコンテナーは動作出来なかった。
2017年04月28日 05時00分 公開
なお念のために言っておくと、Docker for WindowsはWindows Server 2016で利用可能できる「Windowsコンテナ」(正確には「Windows Serverコンテナ」と「Hyper-Vコンテナ」の2つ)をサポートするものではない。あくまでも「Linuxコンテナ」をサポートするものである。各コンテナの違いについては以下の記事を参照していただきたい。
また、Windows 10 Anniversary Update(バージョン 1607、ビルド14393)で導入された**「Windows Subsystem for Linux(WSL)」や「bash(Bourne Again Shell)」(以下の記事参照)と連携することもない。**WSL上に「apt-get install docker.io」でDocker関連のコンポーネントをインストールしようとしても一部エラーになってインストールできないし、WSL上からdockerコマンドを使って、Docker for Windowsの(Hyper-V上にインストールされている)コンテナを管理することもできない。
そうなのであれば、WSL2はDockerと連携できるのだろうか?
調べてみた(2)
- どうやら「WSL2で動いているUbuntu上でDockerエンジンを動かしてLinuxコンテナーを動かせるようになった。WSL1ではDockerエンジンを動かせなかった」ということだった。
WSL バージョン1では、Windows と Linux の基本的な違いにより、Docker エンジンは WSL 内で直接実行できませんでした。そのため、Docker チームは、Hyper-v Vm と LinuxKit を使用して代替ソリューションを開発しました。 ただし、WSL 2 は、完全なシステムコールの容量を持つ Linux カーネルで実行されるようになったため、Docker は WSL 2 で完全に実行できます。 つまり、Linux コンテナーはエミュレーションなしでネイティブに実行できるため、Windows と Linux の両方のツール間でパフォーマンスと相互運用性が向上します。
・・・
Windows 用 Docker デスクトップは無料で利用でき、docker 化アプリのビルド、配布、実行のための開発環境を提供します。 WSL 2 ベースのエンジンを有効にすることで、同じコンピューター上の Docker デスクトップで Linux と Windows の両方のコンテナーを実行できます。
このDockerの設定で、WSL2上で動作しているLinux(ここではUbuntu-20.04)と連携できるようになる。
Conclusion
今(2021年6月時点)は、WSL2上でDockerを使ってLinuxとWindowsの両方のコンテナーを実行できるんだね。
という、いまさらながら理解した、という話。
しょうもない記事だが、とりあえず、私みたいに勘違いしているかもしれない人のために記録を残しておく。👍