すごく簡単。
環境
- Windows 10 Pro (Dev 21370.1)
- Visual Studio Code 1.55.2
Docker DesktopとWSL
- WSL 2
- Docker Desktop 3.3.1(63152)
- Engine: 20.10.5
- (Use the WSL 2 based engine)
❯ wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
docker-desktop Running 2
docker-desktop-data Running 2
WSL上で作業ディレクトリ作成
WSLからcode
コマンドを使って、WSLのファイルシステム上に作ったディレクトリを開く。
$ mkdir -p workspace/dotnetcore/example
$ cd workspace/dotnetcore/example
$ code .
VSCodeで.NET Core用のテンプレートを生成
コマンドパレットから Remote-Containers: Add Development Container Configuration Files...
を実行。
C#
を選択し.NET Coreのバージョンを選択、OK
を押す。
作業ディレクトリ内に.devcontainer
ディレクトリが作成され、devcontainer用のテンプレートが保存される。
└─.devcontainer
│ devcontainer.json
│ Dockerfile
│
└─library-scripts
azcli-debian.sh
テンプレートをカスタマイズ(必要に応じて)
テンプレートで生成されるdevcontainerは、コンテナ内にnon-rootのユーザーvscode (1000:1000)
が用意されている。
ユーザーを追加したい、ユーザーIDやユーザー名を変えたい、といった場合は、Dockerfile
とdevcontainer.json
を編集する。
以下は、ユーザー名vscode
はそのままにUID
とGID
を変更する例。
Dockerfile(追記)
ARG ORG_USERNAME=vscode
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupmod --gid $USER_GID $ORG_USERNAME \
&& usermod --uid $USER_UID --gid $USER_GID $ORG_USERNAME \
&& chown -R $USER_UID:$USER_GID /home/$ORG_USERNAME \
&& apt-get update \
&& apt-get install -y sudo \
&& echo $ORG_USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$ORG_USERNAME \
&& chmod 0440 /etc/sudoers.d/$ORG_USERNAME
USER $ORG_USERNAME
devcontainer.json(抜粋)
"build": {
"args": {
"ORG_USERNAME": "vscode",
"USER_UID": "1000", // ここを任意に変更
"USER_GID": "1000" // ここを任意に変更
}
},
devcontainerを起動
コマンドパレットから Remote-Containers: Reopen in Container
を実行。
イメージのビルドからコンテナの実行までが自動で行われる。
デフォルトで、作業ディレクトリがコンテナ上の/workspaces/ディレクトリ名
にマウントされる。
(この例では~workspace/dotnetcore/example
が/workspaces/example
にマウントされる)
ちなみに、マウントのオプションはtype=bind,consistency=cached
のようだ。
VSCodeで新しいターミナルを起動して、ユーザーやバージョンを確認。
vscode ➜ /workspaces/example $ whoami
vscode
vscode ➜ /workspaces/example $ id
uid=1000(vscode) gid=1000(vscode) groups=1000(vscode),999(nvm)
vscode ➜ /workspaces/example $ dotnet --version
3.1.408
プロジェクト作成
vscode ➜ /workspaces/example $ dotnet new web
The template "ASP.NET Core Empty" was created successfully.
Processing post-creation actions...
Running 'dotnet restore' on /workspaces/example/example.csproj...
Determining projects to restore...
Restored /workspaces/example/example.csproj (in 138 ms).
Restore succeeded.
# ついでに.gitignore生成
vscode ➜ /workspaces/example $ dotnet new gitignore --force
The template "dotnet gitignore file" was created successfully.
F5キーでデバッグ実行可能。ブラウザが開いてHello World!
が表示される。