WSLからDocker Desktop for Windowsを使う

WSL2では、デフォルトでDocker Desktop for Windowsを利用することができるようで、この手順は不要になりそうです。
ただ、仕事で使用するPCなどをpreview版にするにはちょっと、、、という場合はまだまだwsl1で行くしかないので備忘録として。

前提条件

・Windows10 Pro
・Docker Desktop for Windows インストール済み

WSLインストール

Powershellを管理者権限で起動し下記コマンドを実行します。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

実行後PCを再起動。

Ubuntu インストール

Microsoft StoreからUbuntu 18.04 LTSをインストールします。

ubuntu-18

Docker Desktop for Windowsの設定

外部(WSL)から操作できるようにDocker Desktopの設定を変更します。
「General」メニューのExpose daemon on tcp://localhost:2375 にチェックを入れます。

docker-desktop

UbuntuからのDocker Desktopを操作できるように設定

ここからはWSL側の操作です。WindowsのメニューからUbuntuを選択するとターミナルが開くのでそちらで操作します。

環境変数にDOCKER_HOSTを追加

先ほど有効にしたDocker Desktopのホスト設定を追加します。
※ここではシェル起動時に自動で環境変数に設定するようにbashrcに設定を追加しています。

echo "export DOCKER_HOST=tcp://localhost:2375" >> ~/.bashrc && source ~/.bashrc

Ubuntuにdocker関連をインストール

docker-ceのインストール

dockerのドキュメントを見ながら進めます。

https://docs.docker.com/install/linux/docker-ce/ubuntu/

必要なパッケージをインストールしていきます。

まずはcurlや証明書関連のインストール

sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88

docker用のリポジトリを追加。

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

おきまりのupdate

sudo apt-get update

docker関連のインストール

sudo apt-get install docker-ce docker-ce-cli containerd.io

docker-compose インストール

curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

マウントパスを/mnt/c → c/へ

Docker DesktopとUbuntu側のdockerではパスがずれてしまうので、合わせます。

/etc/wsl.confを作成し、マウント位置を変更します。(デフォルトでwsl.confは存在しませんでした)

sudo vi /etc/wsl.conf

wsl.confの中身

[automount]
root = /

変更を適用するにはWSLの再起動が必要ですが、単純にターミナルを落とすだけではできません。
再起動するには、Windowsのコマンドプロンプトで一旦停止し、再度メニューからUbuntuを選択します。

WSL停止はWindowsのコマンドプロンプトでコマンド実行

wslconfig /t Ubuntu-18.04

ここまで問題なくできれば、めでたくWSLからDocker Desktopを操作できるようになりました。
Windowsのコマンドプロンプトでもいいですが、Linuxのコマンドの方が手馴れてるので断然こちらの方が楽!