Windows 10 上で Vagrant と Docker を併用したかったのですが、どうも相性が悪く毎回断念してました。 が、ようやく。。。ようやくできた。。。
コマンドだけで構築できるようにしていますので、ミスなく簡単に構築できると思います。
(追記)
VirtualBox 6.1.16 以降で WSL 2 と安定した併用が可能となったようです。
http://kzlog.picoaccel.com/virtualbox-coexist-with-wsl2-hyper-v/
2021-09-25 追記
VirtualBox Extension Pack の個別アップデート方法の補足を追記しています。
前提
- Windows 10 バージョン 2004 以降
- Home / Pro どちらでも可能なはず(検証は Pro でしました)
- BIOS で Intel VT-x / AMD-V の仮想化ハードウェア拡張を有効にしてある
- 新規で WSL 2 を導入するケース
- VirtualBox 6.1.16 以上
- パッケージマネージャの Chocolatey や Scoop を使えるようにしておくと、より導入が楽(必須でない)
- 再起動が必要になる処理がありますので、作業中はお勧めしません。
1. WSL2 + Ubuntu 2004 インストール
初回の再起動まで
Windows の機能を有効にします。
管理者権限で PowerShell を起動して、以下のコマンドを入力してください。
# Linux 用 Windows サブシステム
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# Windows ハイパーバイザープラットフォーム
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
# 仮想マシン プラットフォーム
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
ここでコンピュータの再起動。
2回目の再起動まで
WSL2 を使用できるようにし、Ubuntu をインストールします。
(通常の権限で)PowerShell を起動して、以下のコマンドを入力してください。
ディストリビュートは Ubuntu 2004 にしていますが、ほかのディストリビュートが良い場合は補足を参照してください。
# WSL 2 Kernel Update
Invoke-WebRequest -Uri https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -OutFile wsl_update_x64.msi -UseBasicParsing
msiexec /i wsl_update_x64.msi /passive /norestart
rm wsl_update_x64.msi
# WSL 2 を標準にする
wsl --set-default-version 2
# Ubuntu 2004 をインストール
Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile linux.appx -UseBasicParsing
Add-AppxPackage -Path linux.appx
rm linux.appx
ここでコンピュータの再起動。
Ubuntu の設定
スタート メニューの中に Ubuntu 20.04 LTS が追加されているので実行します。
初回は初期設定が実行されますので、
- UNIX ユーザー名
- UNIX パスワード
を設定して完了です。
WSL2 + Ubuntu が使えるようになりました。
Ubuntu を閉じます。
2. VirtualBox + Vagrant インストール
Scoop
Scoop を導入すると、コマンドでアプリケーションをインストールできます。
公式ページはこちら
https://scoop.sh
Power(通常の権限で)PowerShell を起動して、以下のコマンドを入力してください。
# PowerShell 実行ポリシー権限がない場合はこちらも実行
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
# Scoop インストール
iwr -useb get.scoop.sh | iex
# Git インストール(Scoop の管理で使用されるため必須。別で Git をインストールしている場合は不要)
scoop install git
# インストールできるアプリを増やすため Bucket の追加
scoop bucket add extras
scoop bucket add nonportable
# sudo インストール(今後 PowerShell を管理者権限で起動しなくてもすますため)
scoop install sudo
これで有名なアプリをコマンドでインストールできるようになりました。
PowerShell を閉じます。
VirtualBox + VirtualBox Extension Pack + Vagrant
Scoop を使えばたった2行でセットアップ完了!
(通常の権限で)PowerShell を起動して、以下のコマンドを入力してください。
# VirtualBox & VirtualBox Extension Pack インストール
scoop install virtualbox-with-extension-pack-np
# Vagrant インストール
scoop install vagrant
【補足】
Scoop のインストールで VirtualBox Extension Pack のバージョンが古いことが多々あります。
別の方法で VirtualBox Extension Pack をコマンドのみでアップデートする方法を確立していますので、そちらも合わせてご参照ください。VirtualBox Extension Pack をコマンドライン (CLI) からインストール&アップデートする
https://qiita.com/mainy/items/b70bd7cc5b20ccdc12a1
Vagrant 一式が使えるようになりました。PowerShell を閉じます。
普通にインストールすると VirtualBox Extension Pack のインストール漏れで引っかかっている人が多いので、そんな悲しいミスも防げます。
3. Docker Desktop インストール
Docker は Scoop でインストールすると、前バージョンの Docker Toolbox がインストールされてしまいます。
WSL2 に対応しているのは Docker Desktop なので、こちらは Chocolatey を使用してインストールを行います。
Chocolatey
Chocolatey もコマンドでアプリケーションをインストールできます。
ただし、Scoop に比べると使い勝手がいまいちなので、こちらは Scoop でインストールが難しいアプリをインストールするために使います。
Chocolatey
https://chocolatey.org/
管理者権限で PowerShell を起動して、以下のコマンドを入力してください。
# Chocolatey インストール
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
PowerShell を閉じます。
Docker Desktop
(通常の権限で)PowerShell を起動して、以下のコマンドを入力してください。
# Docker Desktop インストール
sudo choco install -y docker-desktop
Chocolatey でのインストールは管理者権限が必要なので、インストール時に PowerShell の起動方法に気を付けないといけません。
が、さきほど Scoop で sudo をインストールしていたので、コマンド単位で管理者権限にかんたんに昇格できたと思います。
Docker が使えるようになりました。PowerShell を閉じます。
ここまでで、Docker (WSL2) と Vagrant (VirtualBox) を Windows で併用する環境が出来上がったと思います。
補足
ほかのディストリビュート
上記は Ubuntu 2004 を導入していますが、ほかのディストリビュートもコマンドでインストールできます。
引数 -Uri
に渡す URI を変更してください。
URI は https://docs.microsoft.com/en-us/windows/wsl/install-manual#downloading-distros のリンクを確認してください。
例えば、Debian GNU/Linux を利用したい場合は以下のような感じです。
# Debian GNU/Linux
Invoke-WebRequest -Uri https://aka.ms/wsl-debian-gnulinux -OutFile linux.appx -UseBasicParsing
Add-AppxPackage -Path linux.appx
rm linux.appx
VirtualBox 側の弊害
ゲスト OS と相性が一部悪いようです。
ゲスト OS に Windows 10 を使ってみましたが、やはり使い物になりませんでした。
Ubuntu 2004 ⁺ GUI は問題なく動作しているんですがねぇ。。。
参考
以前にチャレンジしていた時の記録
WSL2 をすべてコマンドでインストールしたときのメモ
https://qiita.com/mainy/items/19862ebb1fa4df2ad497