LoginSignup
12
15

More than 1 year has passed since last update.

Docker (WSL2) と Vagrant (VirtualBox) を Windows で併用する環境作成方法

Last updated at Posted at 2020-12-28

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 を起動して、以下のコマンドを入力してください。

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 にしていますが、ほかのディストリビュートが良い場合は補足を参照してください。

PowerShell
# 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
# 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 を起動して、以下のコマンドを入力してください。

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 を起動して、以下のコマンドを入力してください。

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 を起動して、以下のコマンドを入力してください。

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 を利用したい場合は以下のような感じです。

PowerShell
# 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

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15