作成: 2020年11月19日
更新: 2021年02月07日
Windows 10におけるWSL2とDockerのセットアップ方法.自分用の備忘録として.
参考: Docker入門 #1 【Dockerとは】 - Qiita
VMのように仮想環境を作成し既存の環境を汚さずに環境を構築するツール.
VMなどの既存のツールと比べ軽量.
Pythonなど環境構築の段階で問題が起きやすい言語・フレームワークにおいて有用
Windows 10においてDockerを導入する手段はいくつかあるがここではWSL2を用いた方法を記述する.
WSLとはWindows Subsystem for Linuxの略称でありWindows上でLinuxを動かせるツールである.
5月のWindows 10 May 2020 Updateによりバージョン2であるWSL2が正式にリリースされた.
導入手順としては
参考: Windows 10 May 2020 UpdateでのWSL2導入手順 - Qiita
そのうちアップデートされますが以下のリンクからアップデートすることも可能
Download Windows 10
まずPowerShellを管理者権限で立ち上げます.
そして以下のコマンドでHyper-Vを無効化
Hyper-Vを有効化しておくことでgRPCのport 50051などHyper-Vが予約しているポートとバッティングしているポートを使用しようとする場合などで困ることになるので必要なければ無効化しておいた方がよさそうです。
"機能名 Microsoft-Hyper-V は不明です"などのエラーが出た場合は行わなくて大丈夫です.
Disable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V")
次に以下のコマンドでVirtualMachinePlatformとWSLを有効化
Enable-WindowsOptionalFeature -Online -FeatureName $("VirtualMachinePlatform", "Microsoft-Windows-Subsystem-Linux")
次に以下から「WSL2 Linux カーネル更新プログラム パッケージ」をダウンロードしてきてインストール
WSL 2 Linux カーネルの更新 | Microsoft Docs
WSLを既に使用してる場合はディストリビューションの更新が必要です。
Powershell を管理者権限で立ち上げて以下を実行します。
wsl -l -v
# NAME STATE VERSION
#* Ubuntu Running 1
wsl --set-version Ubuntu 2
更新までしばらく時間がかかります。
wsl -l -v
# NAME STATE VERSION
# Ubuntu Running 2
参考:
Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs
Windows Subsystem for Linuxをインストールしてみよう! - Qiita
WSL でユーザーを作らずに root で作業する - Qiita
PowerShellを管理者権限で立ち上げ以下のコマンドを入力しデフォルトのWSLのバージョンを2にする.
wsl --set-default-version 2
Microsoft Storeで希望のディストリビューションをインストールする(今回はUbuntu).
Ubuntu を入手 - Microsoft Store ja-JP
WSL初回起動時にUser作成を求められる.
ここでユーザーを作成したくない場合rootと入力すると以下のようになる.
Enter new UNIX username: root
adduser: The user `root' already exists.
Enter new UNIX username:
ここでCtrl+Cを入力するとウインドウが閉じるのでもう一度、スタートメニューから起動すると root ユーザーとしてログインされた状態で起動する.
(個人的にWindowsの中にあるWSLにユーザーを作成する意味は薄いと思います)
念のためPowerShellをで立ち上げ ディストリビューションのバージョンを確認
wsl -l -v
# NAME STATE VERSION
# Ubuntu Running 2
参考:
Docker Desktop を WSL2 で使う (Windows 10) | エンジニアの何でもメモ帳
DockerデスクトップWSL 2バックエンド| Dockerドキュメント
Linux for Windowsサブシステム(WSL)2ののDockerの使用
以下のリンクからDocker Desktopをインストール
Docker Desktop for Windows - Docker Hub
インストール時にEnable WSL2 featureにチェックを入れる
Dokcde DesktopからDockerを起動した後
Ubuntuをスタートメニューから起動しDockerのバージョンを確認
> docker -v
# Docker version 19.03.8, build afacb8b7f0
参考: Windows Subsystem for Linuxをインストールしてみよう! - Qiita
デフォルトでは海外サーバーにリポジトリのデータを取りに行ってしまいます。
これだと通信速度が遅くなってしまうので、日本のサーバーに切り替えます。
次のコマンドを入力して、切り替えてください。
sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
あくまでLinuxが乗っかっているので、パッケージのアップデートが必要
sudo apt update
sudo apt upgrade
参考: Windows Terminalをカスタマイズしよう!(Preview v0.11.1121.0版) - Qiita
Ubuntuを起動するだけでもWSLは使えるがWindows 10 May 2020 Updateと同時にリリースされたWindows Terminalをお勧めする.
Microsoft Storeからインストール
Windows Terminal を入手 - Microsoft Store ja-JP
初期設定ではPowerShellがデフォルトなので変更する.また起動時にWSL上のホームディレクトリを初期位置にするように設定する.
Ctrl+, でsettings.jsonが開くのでdefaultProfileを変更する.
settings.json// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation
{
"$schema": "https://aka.ms/terminal-profiles-schema",
"defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}", // ★ここにWSLのGUIDを指定★
"profiles":
.
.
Windows Terminalでは、シェル設定をprofiles
という単位で管理しています。このprofiles毎に一意となるIDがGUID
で、例えばWSL(ディストリビューションはUbuntu)の場合は"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}"
となります。
このGUIDを"defaultProfile"
プロパティに指定することで、Windows Terminalを起動した時に対応するシェル:WSLが開くようになります。
ただ、この設定だけだとWSLが開いた際のディレクトリ位置は%USERPROFILE%
となっています。
WSL上のホームディレクトリを初期位置とするには、次の設定をWSL profileにする必要があります。
settings.json .
.
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": false,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl",
"commandline": "wsl.exe ~ -d Ubuntu" // ★ ~ を付けるのがポイント★
},
.
.
参考: VSCodeのターミナルをWSLのものにする - Qiita
VSCodeでCtrl+Shift+@で開くターミナルをWSLに変更する.
VSCodeの設定を開き
"terminal.integrated.shell.windows": "C:/Windows/Sysnative/bash.exe"
とする
参考: WSL2によるホストのメモリ枯渇を防ぐための暫定対処 - Qiita
WSL2を使用しているとホスト側でvmmemというタスクの使用メモリが増え続け,最終的に100%メモリを使用してしまうという問題があり,2020/11/19 現在解決されていません.
公式のイシューによるとWSLの設定ファイルを作成し,WSLのメモリサイズを固定するという暫定対処が推奨されています.
WSL 2 consumes massive amounts of RAM and doesn't return it · Issue #4166 · microsoft/WSL
C:\Users${username}.wslconfigというテキストファイルを作成し,以下のように記述します.
[wsl2]
memory=6GB
swap=0
localhostForwarding=true
そしてWindowsを再起動するか,コマンドプロンプトから以下のコマンドを実行しWSLを再起動するとWindows全体でのメモリ枯渇は起きなくなります(WSLでのメモリ枯渇は起きる).
wsl -l
# Windows Subsystem for Linux ディストリビューション:
# Ubuntu(既定)
wsl -t Ubuntu # ディストリビューション名を指定