WSL2 で管理者権限なしで docker を使う

PC

WSL1 でも docker を使うことはできましたが、管理者権限が必要です。

個人 PC ならそれでも全然問題ないのですが、会社の閉ざされた空間では、管理者権限なしにいろいろできる、というところが非常に重要なのです。

WSL2 では管理者権限不要で docker が使えるようになっているハズなので、遅まきながら試してみます。

前提

以下の状態で動作確認しています。

  • Windows10 Pro バージョン 2004
  • WSL1 をインストールしている
  • Ubuntu 20.04 インストール済み

WSL2 のインストール

ぶっちゃけ公式サイトを見たほうが早いです。

この手の解説ページは、公式サイトはわかりにくいというのが定説ですが、めずらしく(?)わかりやすいです。

WSL のインストール
コマンド wsl --install を使用して Linux 用 Windows サブシステムをインストールします。 Windows コンピューター上で、好みの Linux ディストリビューションによって実行される Bash ターミナルを使用します。Ubuntu、Debian、SUSE、Kali、Fedora、Peng...

とはいえそれで終わりだと書くことがなくなってしまうので、自分なりにまとめてみます。

WSL を有効化する

管理者権限で Windows PowerShell を開き、以下を実行することで有効化できます。

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

今回はすでに対応済みなのでやってません。

Windows の機能」でも設定・内容の確認を行えます。

Linux 用 Windows サブシステム」にチェックを入れれば OK です。

仮想マシンプラットフォームを有効化する

UEFI 画面で、VT-X(インテル CPU の場合)もしくは SVM(AMD CPU の場合)を有効化します。

設定方法についてはお使いのマザーボードによって異なるので、マニュアルなどを参照してください。

今使っているマザーボードは ASUS TUF B450M-PRO GAMING ですが、Advanced Mode の Advanced → CPU Configuration の中にありました。

ASUS AMD B450 搭載 AM4 対応 マザーボード TUF B450M-PRO GAMING【MicroATX】【 第3世代 AMD Ryzen CPU に対応】
Aura sync対応、AMDB450搭載 mATXゲーミングマザーボード, DDR4 3533MHz 、USB 3.1 Gen 2対応 【GPU Temperature Sensing & Fan Xpert 2+】 すべてのファンの冷却性能と静音性のバランスを最適に維持 【TUFプロテクション】 SafeSlot,...

BIOS は少し古いバージョンを使っています。そのあたりの事情については以下もどうぞ。

その後再び Windows を起動したら、WSL と同じように管理者権限で Windows PowerShell を開き、以下を実行します。

PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

こちらも同じように、「Windows の機能」からでも設定できます。

仮想マシン プラットフォーム」にチェックが入っていることを確認します。

Linux カーネル更新プログラムのインストール

https://aka.ms/wsl2kernel で Linux カーネル更新プログラムをダウンロードし、インストールします。

2クリックで完了。あっという間に終わります。

WSL2 の有効化

wsl --set-default-version 2 コマンドで、WSL2 を有効化します。

PS C:\Users\kz> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

これだけです。めっちゃアッサリです。

WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください

と表示された場合は、1つ前の手順である、「Linux カーネル更新プログラム」がインストールされていない状態ですので、まずはインストールしておきましょう。

Ubuntu のインストール

まだ Ubuntu をインストールしていないようなら、Microsoft Store でインストールします。

今回はすでに Ubuntu 20.04 の方を入れているので、この手順はスキップしています。

ちなみに、バージョンが記されていない「Ubuntu」は、その時点での最新バージョンの Ubuntu を指しているようです。2020年10月時点では Ubuntu 20.04 です。

ストアにある3つの「Ubuntu」の違いは? ~WLSの「Ubuntu」をアップグレードする方法/「Ubuntu」のリリース形態を理解して、適切なものを選択しよう【やじうまの杜】
 “やじうまの杜”では、ニュース・レビューにこだわらない幅広い話題をお伝えします。

既存の Ubuntu を WSL2 に変更する

WSL のデフォルトバージョンを2にしても、もともと WSL1 の時点でインストールしていた Ubuntu は WSL1 のままです。

C:\Windows\System32\wsl.exe を、普段使用している管理者ではない通常のユーザー権限で起動します。(エクスプローラでダブルクリックしないとダメかも)。

PS C:\Users\kz> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1

以下のコマンドで、WSL2 に変更します。

PS C:\Users\kz> wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

20~30秒程度で WSL2 への変換が完了しました。

改めて確認してみると、VERSION が2に変更されています。

PS C:\Users\kz> wsl --list --verbose
  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

Docker をインストールする

さてここからが WSL2 の真骨頂、普通に Docker をインストールします。

そう、Docker Desktop for Windows とかを入れなくてもよいのです。スバラシイ。

まず、普通に Ubuntu を起動します。管理者権限で起動する必要はありません。

その後は、Docker 公式手順に従うだけです(Ubuntu の apt repository に入っているものは古いので、特に理由がない限りは公式手順にしたがった方がよいです)。

Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install Docker Engine on U...

めんどうな方は以下をコピペでどうぞ。

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

インストールが終わったら、自分自身のユーザーで docker コマンドが実行できるようにしておきます(この辺は好みで省略してもらっても OK)。

$ sudo gpasswd -a $USER docker

一応、いったん Ubuntu のウィンドウを閉じて再度開きなおしてから、docker を起動します。

$ sudo service docker restart
 * Stopping Docker: docker                                               [ OK ]
 * Starting Docker: docker                                               [ OK ]

おもむろに docker ps コマンドを実行すると・・・

$ docker ps
CONTAINER ID   IMAGE         COMMAND       CREATED       STATUS        PORTS         NAMES

YES!すばらしい!

コメント

タイトルとURLをコピーしました