結論
インストール・起動は問題ないですが、WSL2からdockerコマンドが使えない場合は、
現状は以下の設定を ~/.bashrc
などの設定ファイルに追記しておきましょう。
【2021年1月25日追記】
Docker Desktop 3.1.0 ではWSL2 Ubuntu側に /usr/bin/docker -> /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker*
のシンボリックリンクが張られるようになったので、以下の設定は不要になりました。
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'
前提
- Windows 10 Home
- WSL2 Ubuntu (他のDistroでもおそらく同じ)
WSL2環境のセットアップ
WSL2環境の準備については、以下の記事を参考にすると良いと思います。
Docker Desktop をインストール
2020/03/20 の時点ではWSL2自体が正式版ではないので、Docker DesktopもStableではなくEdgeチャンネルを使うことになります。
(2020/05頃にはおそらくWSL2もDocker Desktopも正式版が来るはず!)
以下の記事にEdgeチャンネルのDocker Desktopのダウンロードリンクが貼られているので、そちらからダウンロードします。
(Docker Desktop Edge 2.2.2.0) となっているところです。
以下の公式のDocker Desktop for Windowsの提供ページから Edgeチャンネルのものをダウンロードしても大丈夫です。
インストール作業は、特になにか設定等は必要なく、デフォルトのままインストールすれば問題なく入りました。
WSLからdockerコマンドを実行する
そのままインストールしただけだと、WSL2 から docker
とコマンドを打ってもダメでした。
docker.exe
はWindows側にインストールされていて、コマンドプロンプトやPowerShellから問題なく動きます。
それをWSL2からも実行したらどうなるか試してみました。
うん。動きます。
試しにnginxを起動してみましょう。
docker.exe run --rm -p 80:80 nginx
Windows セキュリティの重要な警告 ダイアログが表示されるので、アクセスを許可する
を選択します。
この状態で docker ps
を実行してみましょう。
WSL2側からも、Windows側からも、どちらも同じDocker Daemonに繋ぎにいっていることがわかります。
nginx はWindows側で起動しているので、ブラウザで http://localhost:80
にアクセスするとDockerで起動したnginxコンテナに繋がります。
WSL2からもlocalhostでWindows側にアクセス可能なので、問題なくnginxコンテナに繋がります。
エイリアスの設定
Windows 10 HomeにDocker Desktopをインストールして、WSL2からdockerを使用するのが問題なさそうだとわかりましたが、docker.exe
とするのは面倒なので、エイリアスを設定しておきます。
alias docker='docker.exe'
alias docker-compose='docker-compose.exe'
これで他の環境やコマンドのサンプル通りに docker
だけでコマンドが使えるようになります。
また、docker-compose
についても、 docker-comopose.exe
でインストールされているので、こちらにもエイリアスを設定しておきました。
補足
試したWindowsの環境は、次のようなコマンドで一度dockerを導入したことがあるので、もしかしたらそれがWSL2側にdockerコマンドがすんなり入らない原因かもしれません。
インストール済みの場合は apt remove
で除去しておきましょう。
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose
-y