🦁

Dev Container on WSL2で開発環境構築

2023/03/04に公開

Dev Containerで開発環境構築のアレンジパターンを実施したので、メモとして残します。本パターンではDocker Desktop For Windowsをインストールする必要が無いので、ライセンス的にDocker Desktopをインストールしたくない、出来ない環境で活用できるかもしれません。(そうでない場合、上記パターンの方が楽だと思います。)

やりたいこと

  • 開発環境をWSL2のDocker上で動くDev Containerとする。
  • ローカル環境からVS Codeの拡張機能(Remote Development)を利用して開発環境へアクセスする。

ローカル環境を構築

Windows側に最低限入れるもの

  • VS Code
    • VS Code Remote Development拡張機能
  • WSL2

上記以外のものは極力ローカルではなく、WSL・Dev Container側にインストールします。

VS Code

VS Codeをインストール

VS Codeをダウンロードしてインストール

VS Code拡張機能をインストール

VS CodeにRemote Development 拡張機能パックをインストール

WSL2

この辺を見ながらWSLのインストールを進めます。
https://learn.microsoft.com/ja-jp/windows/wsl/basic-commands

WSL ディストリビューションのインストール

WSL2がセットアップされていない場合、インストールしてアップデート

wsl --install
wsl --update

利用できるディストリビューションを確認

wsl --list --online

Ubuntu-22.04をインストール

wsl --install Ubuntu-22.04

現在ローカルにある環境を確認

wsl --list --verbose
NAME                   STATE           VERSION
Ubuntu-22.04           Running         2

インストールされてRunningになりました。

既定のディストリビューションを確認

wsl --status

既定のディストリビューションを今回作ったものに変更

wsl --set-default Ubuntu-22.04

(メモ)ディストリビューションを再インストールする場合

今回はやりませんが、以下操作を行うことでクリーンな状態の再インストールができそうです。

アンインストール

wsl --unregister <DistributionName>
ex) wsl --unregister Ubuntu-22.04

再インストール(最初のインストール時と同じ)

wsl --install Ubuntu-22.04

リセットのやり方が分かってると、試行錯誤で作業を進めやすいです。

あとは、wsl --importwsl --exportコマンドを使ってWSL環境のインポートやエクスポートが出来るみたいです。

(メモ)WSLを再起動する場合

wsl --shutdown

WSL側の設定

再度この辺を見ながらWSL側の設定を進めます。
https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-vscode

update & install

sudo apt-get update
sudo apt-get install -y wget apt-transport-https ca-certificates curl gnupg lsb-release

Dockerの公式GPGキーをダウンロードする

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Dockerのリポジトリを追加する

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Dockerをインストールする

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

Docker Composeをインストール

sudo apt-get install -y docker-compose

Dockerを起動する

sudo service docker start

ユーザをdockerグループに追加する

sudo usermod -aG docker $USER

VS Codeの実行

code .

WSL環境をリモートでVS Codeから開いた時の画面です。Remote SSHで開いてる時と同じような感じですね。

Dev Containerを構築

この辺を参考に進めました。
https://learn.microsoft.com/ja-jp/windows/wsl/tutorials/wsl-vscode

Dev Containerの初期化

  • VS Codeを開く
  • Ctrl + Pでコマンドパレットを開く
  • >Dev Containers Open Folder in Containerを選択しプロジェクトを作りたいフォルダを選択

作りたい環境を選択していきます。
今回はJava17で設定しますが、ここでPythonでも何でも自分が構築したい環境のベースを選択出来ます。

  • Java devcontainersを選択
  • 17を選択
  • Install Gradle ... にチェック

初めに選択したフォルダに.devcontainerフォルダが作成され、フォルダ内に.devcontainer.jsonファイルが作成されます。

VS Code左下の緑のマークがDev Container:XXXXとなっていれば、作成されたコンテナにローカルからリモート接続した状態となっています。

この状態としては、devcontainer.jsonに書かれた内容でコンテナが作成され、作成されたコンテナにVS Codeからリモート接続した状態になっています。
逆に、ホストマシンから普通にフォルダを開きたい場合には、緑のマークを押下>Reopen Folder Lolacllyを押せば、ホストマシンの環境で開きなおしてくれます。

Dev Containerの拡張設定

これだけでも開発は進められますが、ある程度の環境構築は自動でやってくれるように、
Dev Container側にVS Codeの拡張機能をインストールします。

  • devcontainer.jsonに追記
"extensions": [
	"vmware.vscode-boot-dev-pack",
	"vscjava.vscode-spring-initializr",
	"vscjava.vscode-gradle"
],
"forwardPorts": [8080],
"remoteUser": "root"

以下の設定を追加しています。

  • Spring Bootの拡張機能を追加
  • Gradleの拡張機能を追加
  • コンテナからホストへPort8080をフォワード
  • コンテナをrootユーザで実行

編集したら保存して、左下のメニューからRebuild Containerを選択して実行します。
これで、Javaで開発する基盤が整いました。

注意点

DockerがWSL2側にあるせいだと思いますが、対象フォルダをローカルで開いている状態でDev Containerから再度開きに行く場合、Ctrl + P > Reopen in WSL > Reopen in Containerの様に、一度WSL環境を経由してから開く必要がありました。

Discussion