Dev Container on WSL2で開発環境構築
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のインストールを進めます。
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 --import
やwsl --export
コマンドを使ってWSL環境のインポートやエクスポートが出来るみたいです。
(メモ)WSLを再起動する場合
wsl --shutdown
WSL側の設定
再度この辺を見ながらWSL側の設定を進めます。
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を構築
この辺を参考に進めました。
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