WSL2, Docker Desktop for Windows, VSCodeでの開発環境を整える

WSL2が使えるようになった

いつのまにかWindows 10 1909にもバックポートされていたので、プライベートのPCや会社のPCに

  • Windows 10 Home
  • WSL2
  • Docker Desktop for Windows
  • VSCode Remote Containers

の組み合わせで開発環境を構築してみた。

WSL 2 Support is coming to Windows 10 Versions 1903 and 1909 | Windows Command Line

なおWSL2を使うには 2020/12/27時点の条件は以下の通り。

  • CPU仮想化が有効になっていること
  • x64システムの場合:バージョン1903以降、ビルド18362以上
  • ARM64 システムの場合:バージョン2004以降、ビルド19041以上

Windowsキー+Rキーのショートカットから"ファイル名を指定して実行"を開き、 winver コマンドでWindowsのバージョンを確認できる。

resized-UANFyBdLrmAYLcQn.jpg

WSL2のセットアップ

Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs

上記公式の手順通りで行う(手動インストールを利用)

WSLの有効化

Linux用Windowsサブシステムの有効化を行う。 PowerShellを管理者権限で開き、以下のコマンドを実行する。

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

これで WSL1 が有効になる。これをWSL2にアップデートする。

WSL2への更新/仮想マシンの機能を有効化

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

ここまで終わったら 再起動 する。

これでWSL2に更新される。

Linuxカーネル更新プラグラムパッケージのインストール

x64用 WSL2 Linuxカーネル更新プログラムパッケージ

ARM64はこちら

ダウンロードしたパッケージはmsi形式なので、ダブルクリックでインストールする。

WSL2を規定のバージョンとして登録する

wsl --set-default-version 2

Microsoft Storeから好きなLinuxディストリビューションを入れる

MicrosoftStoreを開き、Ubuntuなどと検索すると出てくる。 (大きなファイルをダウンロードするので、出先でやらないほうがいい)

インストールが終わったら選んだディストリビューションがWindowsの普通のアプリの1つとしてWindowsのメニューに出てくるので、それを起動すれば使えるようになる。

Docker for Windowsのインストール

Docker for Windows release notes | Docker Documentation

2020/12/27時点で最新の Docker Desktop Community 3.0.0をインストールする。 こちらもダウンロードしてダブルクリックでインストールできる。

インストーラのキャプチャを忘れていたのだが、WSL2を有効化していれば自動的にWSL2をベースとして利用する設定にチェックが入っていたはず。

インストール後は今回はWindows 10 Homeで行っているので Use the WSL2 based engine (Windows Home can only run the WSL2 backend) にチェックが入り、チェックは外せないようになっている。

resized-KZlHIJBfGgxNAgLb.jpg

PowerShellからもdockerコマンドが利用できるようになっている。インストールしたLinuxからも同様にdockerコマンドが利用できるはず。

こっちはPowerShell

resized-riqbFKNLXQehcLUU.jpg

こっちはUbuntu

resized-viLHbWscQtYqraWa.jpg

VSCodeのセットアップ

VSCode自体のインストールは省いて、VSCodeからWSL2上で動くUbuntu、の上で動くContainerにリモートアクセスして開発環境を整えていく。

VSCodeの Remote Development をインストールする

Remote Developmentという拡張は、Remote WSL、Remote Containers、Remote SSHの3つを含む拡張で、Remote SSH等は単体でも使うことができる(単純にVPS等のサーバに接続して開発するだけならRemote SSHだけでOK)

今回はWSL2、Ubuntu、Docker Containerの組み合わせなのでRemote Developmentをインストールする。

resized-olsVjXAYqNqBkQMt.jpg

開発用のコンテナを用意する

まずは開発用のディレクトリを作る。このディレクトリはこれから作成するコンテナからは /workspace の下でアクセス可能となり、Ubuntu内のディレクトリであるため永続化される。

mkdir sample
cd sample
mkdir .devcontainer
cd ..
code .

これでVSCodeが起動する。

devcontainer.json

devcontainer.json reference

devcontainer.jsonはプロジェクトの環境をVSCodeに伝えるためのファイルで、様々なプロパティが用意されている。

拡張子の通りjsonで記載していく。 設定は様々あるがDockerfileを利用したコンテナを作成する場合は以下は必須となる。

{
    // devcontainer.jsonからの相対パスで記載する
    "dockerFile": "Dockerfile"
}

その他は好きに設定していいが、最低限 name, context プロパティくらいは定義してもいいかもしれない。

{
    // devcontainer.jsonからの相対パスで記載する
    "dockerFile": "Dockerfile",

    // VSCodeで表示されるコンテナの表示名
    "name": "sample",

    // Docker buildが実行されるディレクトリ。デフォルトは devcontainer.jsonと同じ階層"."で、devcontainer.jsonから相対パスで記載する。
    "context": ".."
}

Dockerfileの準備

Dockerfileは何でもいいので適当に準備して、devcontainer.json内のdockerFileに定義した場所に配置する。 今回はgoの公式イメージを利用してみる。

golang - Docker Hub

resized-jvZHUHJKAPgpOuNS.jpg

コンテナのビルド

resized-bpMyfnYsnPcXhBeG.png

コマンドパレットを開き、以下を選択する。

Remote-Containers: Rebuild and Reopoen in Container

するとDockerfileに記載したコンテナがビルドされ、コンテナのビルドが成功すると自動的にVSCodeはコンテナ内にログインした状態になる。

resized-HXLKnMqaKLINprdH.png

コンテナの再ビルド

コンテナ内にVSCodeからログインした状態でコンテナを再ビルドしたい時はコマンドパレットにて以下を選択する。

Remote-Containers: Rebuild Container

Docker Desktopで作成したコンテナを確認する

Docker DesktopをWindows側で開くと containers/Appsに起動中のコンテナを確認できる。 またImagesにコンテナのイメージがあることも分かる。不要になったイメージはこちらから削除することができる。