Windows+WSL2+Docker+VSCodeでdocker開発環境を作る

最近 Thinkpad X1 Extreamを購入しました。

開発業務は基本Ubuntuでやっていきたいのですが、Windowsでしか動かないアプリたち(Adobe、MSOfficeなど)も使っていきたく。ホストOSはWindows 10 Home, 開発用としてWLS2 (Windows subsystem for Linux 2) を利用していくことにしました。

はじめはVirtualBoxを準備しようかと思いましたが、WSL2はプレビューながら業務で使えると同僚からちょっと聞いていたので、今回はこちらにしてみました。

また、最近VSCodeのRemote拡張がイケてるので合わせて導入していきます。

WSL2のインストール

WSL 2 のインストール | Microsoft Docs を参考にやってきます。

Insider Programに参加

Windows Insider Program | Get the latest Windows features に参加して、OSのアップデートをします。 僕はここでアップデートし忘れてはまりました。

https://i.imgur.com/rA6BLmh.png

Ubuntuのインストール

Windows StoreからUbuntuをインストールしました。

Windows Storeアプリを起動して、Ubuntu と検索してくれば出てきます。

f:id:fly1tkg:20200119195952p:plain

WSLを有効にする

Powershellを管理者権限で実行(右クリックで選べる)してWindows Subsystem for Linux仮想マシンプラットフォームのオプションコンポーネントの両方がインストールされていることを確認します。

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

実行後再起動します

WSL2に変更する

Powershellで以下のコマンドを実行しました。

wsl --set-version Ubuntu 2

ここまでスタートメニューからUbuntuをえらんで起動できます。

Dockerのインストール

ここから先はUbuntuのコンソールで実施していきます。

docs.docker.com

Ubuntuにdockerをインストールして、自分のユーザをdockerグループに入れます。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh
$ sudo usermod -aG docker {your-user}

docker起動

$ sudo cgroupfs-mount
$ sudo service docker start

動作確認としていつものdockerのhelloworldを実施してみました。

https://hub.docker.com/_/hello-world

$ docker run --rm hello-world

VSCodeのインストール

Visual Studio Code - Code Editing. Redefined からダウンロードして、インストール。

インストール後、拡張機能 ms-vscode-remote.remote-wsl を入れます。

https://i.imgur.com/vyY99dI.png

インストール後、Ubuntuのコンソールで code コマンドが使えるようになっているので、任意のプロジェクトフォルダで以下コマンドを実行すると、Windows側でVSCodeが開き、プロジェクトフォルダ内のファイルを編集できます。(便利、、!)

$ code .

ファイル共有

WSL -> Windowsの参照は /mnt/c 配下がWindowsのCドライブがマウントされているので、WSL上からWindowsのファイルを読み書きすることができる。

逆に Windows -> WSL の参照は\wsl$ というネットワークドライブがアクセスできる(Exploreでここに移動すると見られる) ので、クイックアクセスにピン止めしておいた

そのほかやったこと

Windowsのビーブ音を消す

なんか、tabで補完するたびにビープ音が出るので、OSの設定で消しました。

qiita.com

.inputrc で制御できるみたいなのですが、sshした先とかでビープ音なっちゃうし、そもそもWindowsのビープ音腹立つのでいったんこの設定で様子見ます。

WSL向けのターミナルを入れる

複数Windowで開くなどが標準のターミナルだとできないようだったのでwslttyというターミナルを導入しました。

github.com