WSL2とVSCで作るWindowsでのDocker内開発環境(2021年睦月)

# 初めに
こんにちは、本書をご覧になっていただき、読者のみなさまに感謝します。
- 改訂
    - 2025/05/29: Dockerインストール方法を新記事に差し替え

- [シリーズ全体構成はこちら](#シリーズ全体構成)

最近ではDocker/K8Sの利用が増え、確実に動く環境で開発し、テストし、デバッグし、そのままデプロイすることが増えている。
現在筆者が携わっているオープンアソシエイツ(RPAテクノロジーズ/BizROBO,JimuROBO)社やスキャる社でもアプリの一部がDockerコンテナやK8Sポッドとして動き、サービスを提供している。
筆者はこうしたシステムの設計や開発・運用・パフォチューなどに従事しているのだが、Windowsでの開発環境でVSCodeとDockerを組合わせて使っている。
今回は、この環境の作成方法を説明することで、これまでの総括をし、似たような環境を構築したいと考えている方々の参考になるのではとの思いから本書を投稿した。

念のために、タイトルなどの略語は以下のこと。詳しい説明は省略。

- WSL: Windows subsystem for linux
- VSC: Visual Studio Code
- K8S: Kubernetes

## 対象の読者
以下のような方々のお役にたてれば幸いです。

- ソフトウェア開発、特に製造や評価などに関わる人
- WSLのLinux/DockerDesktopが素直でなく、使う気になれなかった人
- WSLでDockerを動かしてVSC開発しようとしたが、うまくいかなかった人。
- WSLとWindowsでのファイル共有などで、文字コードの違いに困っていた人

## 環境構築の前提と方針

### 用意するPC
Windows10でDocker環境が動くCPUとメモリー(最低で8G,推奨16G以上)
### 構築方針
- なるべくPC全体の環境を汚さないようにする
- ユーザごとに独立した環境を作る
- アプリやツールは自由に入れ替えられるようにする

# 時は満ちた
## 念願のWSL2
VSCとDockerの開発にはWSLを使わず、やや古い環境である、DockerMachineを改造してHyper-Vで使っていた。(SambaClientが動作するようにLibraryを追加・更新し、WindowsのドライブをマウントできるようにN/WやDNSを設定などを追加[^0]) 仮想環境の仮想Switchを固定IPで作成し、C:ドライブを/cにマウントしておくことで、Docker定義のBindMountがうまく働いでDockerファイルやDockerComposeなどを動かすことができていた。
　本当はWSLを使いたかっただが、以下のような理由から断念していた。(今となってはうろ覚えだが、、、)

* 素直でない：docker コマンドを素直に使えない
* 文字コード：BindMountなどで共有した場合のファイル名の文字コードなどに日本語が使えない

だったと思う。

### アップデートができない、、、

WSL2への更新が2020年9月から開始された。「Windows 10 May 2020 Update (Version 2004)」で使えるようになるとアナウンスされ[^1]、Windows Updateでも以下のような表示がされるようになった。しかし、筆者のマシンは会社のポリシーからか一向に更新可能にならず、、、　残念な思いをしていた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/3980ea58-fa6f-e5e4-ee6c-12e7c8b030c4.png)

### でも大丈夫

よくよく調べてみると、Version 2004に上げなくともWSL2を使えるようになるというのが分かった。(MSの記事[^2]では、x64 システムの場合:バージョン 1903 以降、ビルド 18362 以上)　そこで、何度かWindows Updateを繰り返すことで、Version 1903(OS ビルド 18362)にすることができた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/352975/462951d5-fd79-554f-8ead-2003f0c7d11c.png)

### インストールのやり方などは省略
　インストールの仕方自体は他の記事に譲り、ここでは、以下のような流れでVSCode開発をDockerコンテナ内で行う環境を構築する方法を説明する。

# 終りに
以下のような構成で記事を書き進めていく予定。

## シリーズ全体構成

1. [WSL2とVSCで作るWindowsでのDocker内開発環境](https://qiita.com/drafts/ee348acec54195ef5bd1)
1. [パッケージ管理(scoop)](https://qiita.com/CinTAKE/items/c5419c3917927b12f381)
1. [PowerShellCore](https://qiita.com/CinTAKE/items/a4b8923e79326030eaf3)
1. [ターミナル(WindowsTerminal)で効率アップ](https://qiita.com/CinTAKE/items/61def2faee7bea4fb908)
1. [基本ツールと環境設定](https://qiita.com/CinTAKE/items/f2085db103380b8fe214)
1. [WSL2の手動インストール](https://qiita.com/CinTAKE/items/33bd52a4580a5b258f56)
1. [Docker for Windows on WSL2 - DockerDesktop,RancherDesktopを使わないシンプル構成](https://qiita.com/CinTAKE/items/93f5ff13f2890394e434)
    1. [過去記事： Docker Desktop for Windows on WSL2](https://qiita.com/CinTAKE/items/e23d98f3765f244175cb)
1. [Visual Studio Code](https://qiita.com/CinTAKE/items/bb216851417a619c2e87)
1. [開発環境用MySQL+Admin](https://qiita.com/CinTAKE/items/8dd0e9f570c12caf1572)
1. [Docker内PHP開発環境 1/2](https://qiita.com/CinTAKE/items/ef25607d9a2724a049f5)
1. [Docker内PHP開発環境 2/2](https://qiita.com/CinTAKE/items/f9a7a9791234d71f7aaa)
1. [Docker内Pytho開発環境]()
1. [Docker内NodeJS開発環境]()
1. [Docker内Java開発環境]()
1. [WSL2/Dockerのトラブル治療室](https://qiita.com/CinTAKE/items/76ee1ae96f389623d99f)

https://qiita.com/CinTAKE/items/ee348acec54195ef5bd1

https://qiita.com/CinTAKE/items/c5419c3917927b12f381

https://qiita.com/CinTAKE/items/a4b8923e79326030eaf3

https://qiita.com/CinTAKE/items/61def2faee7bea4fb908

https://qiita.com/CinTAKE/items/f2085db103380b8fe214

https://qiita.com/CinTAKE/items/33bd52a4580a5b258f56

https://qiita.com/CinTAKE/items/93f5ff13f2890394e434

https://qiita.com/CinTAKE/items/bb216851417a619c2e87

https://qiita.com/CinTAKE/items/8dd0e9f570c12caf1572

https://qiita.com/CinTAKE/items/ef25607d9a2724a049f5

https://qiita.com/CinTAKE/items/f9a7a9791234d71f7aaa

https://qiita.com/CinTAKE/items/76ee1ae96f389623d99f

**過去の記事**

https://qiita.com/CinTAKE/items/e23d98f3765f244175cb

[^0]: [Boot2Docker with cifs](https://github.com/korabo/boot2docker-cifs)
[^1]: [Version 2004 新機能](https://docs.microsoft.com/ja-jp/windows/whats-new/whats-new-windows-10-version-2004 "Windows 10 Version 2004 の IT 担当者向け新機能")
[^2]: [WSL2 instal](https://docs.microsoft.com/ja-jp/windows/wsl/install-win10 "Windows 10 用 Windows Subsystem for Linux のインストール ガイド")