🔖

Windows環境下でDockerを使う場合

2025/01/30に公開1

はじめに

Dockerと言ったら基本はLinux系のOSで動かすことがほとんどだったのだが、日本企業ではWindowsサーバーを入れているところがそれなりに多いため、Windows環境でも問題なく動かせるものなのか実験してみた。(外国の企業でWindowサーバーが多く導入されているのかは知りませんが・・・)

前提環境

Windows 10 pro
WSL2(Ubuntu-20.04)

Dockerを使うための方法

Windows環境下でDockerを使おうとしたら、大きくは以下2案が主流と認識している。

  1. WSL上に Docker をインストール(Podman使ってdocker管理する場合もこちらに含む)
  2. Docker Desktop

Docker Desktopについては当初無料で提供されていたが、現在は有料となっている。 (ただし、教育目的での利用や、個人利用などの商用利用がない場合などはフリーライセンスで使うことも可能らしい)

かなり主観だが、特徴は以下の様なところかと思っている。

● Docker Desktop を選ぶべき場合

  • 初心者で簡単に始めたい。
  • GUI を使ってコンテナを管理したい。
  • 公式サポートや安定性を重視する。

● WSL 上に Docker をインストールすべき場合

  • システムリソースの消費を最小限にしたい。
  • Linux 環境でのネイティブな操作を優先したい。
  • CLI のみで十分に操作できる。
  • 商用ライセンスを避けたい。

今回は WSL2上に Docker をインストールする方法を試してみる

(手順1)WSLを有効化する

まずは、そもそもwslが有効化されているか確認する。(wsl コマンドが認識されていない場合は有効化されていない。)

wsl --list --verbose

有効な場合、インストール済みの Linux ディストリビューションの一覧全てが以下の様に表示される。

wsl --list --verbose
  NAME              STATE           VERSION
* Ubuntu-20.04      Stopped         2
  Ubuntu-18.04      Running         1

※ VERSION=2 のものが存在すれば、WSL2 がインストール済みという事になる。

有効になっていない場合は、以下の様なエラーが出るかも。

この場合はコマンドプロンプトやPowerShell上で以下を実行する。
(この時、コマンドプロンプトを管理者権限で起動させる必要ある)

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

※ 補足すると、上記の有効化はGUI上の操作でもできる。
Windowsの機能の有効化または無効化 より以下の項目にチェックを付ければよい。

WSL自体の有効化はできているが、以下の様なエラーが発生する場合は、WSLをアップデートしてみる。

wsl --list --verbose
Linux 用 Windows サブシステムには、ディストリビューションがインストールされていません。
ディストリビューションは Microsoft Store にアクセスしてインストールすることができます:

wsl --update

再度、ディストリビューションの一覧を確認してみると、エラーメッセージが変わっている。
(install コマンドとかで、ディストリビューション入れろというエラー)

wsl --list --verbose
Linux 用 Windows サブシステムにインストールされているディストリビューションはありません。

使用可能なディストリビューションを一覧表示するには、'wsl.exe --list --online' を使用します
インストールするには 'wsl.exe --install <Distro>' と指定します。

ディストリビューションは、Microsoft Storeにアクセスしてインストールすることもできます:
https://aka.ms/wslstore
エラー コード: Wsl/WSL_E_DEFAULT_DISTRO_NOT_FOUND

※ 特に何も指定しない wsl --installの場合、Ubuntu が入った。インストール時、LinuxOSのアカウント・パスワードの登録が求められる。

shell操作が慣れていない人は Microsoft Store に接続し、WSL用のディストリビューションを取得することも可能。

  1. スタートメニューを開いて、「Microsoft Store」と検索し、ストアを起動。
  2. ディストリビューションを検索してインストール(下図はUbuntu 20.04)

shell実行の場合でも、Microsoft Storeから取得した場合でも以下のフォルダが作られる。

C:\Users\<ログインアカウントの_ユーザー名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_<ランダム文字列>

(手順2)Dockerをインストール

まずは、wsl2を起動した状態で以下のコマンドを実施し、OSのバージョンを確認する。

wsl上
cat /etc/os-release

NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

Ubuntu が入っている事を確認できたら、Ubuntuのシェルコマンドを叩く時と同じように以下を実行する。

Dockerインストール

パッケージ管理ソフトの最新化・必要パッケージのインストール

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

Docker公式のGPG公開鍵を追加

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

ちゃんと公開鍵が追加されたか確認

sudo apt-key fingerprint

リポジトリの追加

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

リポジトリが追加された事を確認

cat /etc/apt/sources.list | grep docker

使用できるバージョンの確認

apt-cache madison docker-ce

dockerのインストール(一旦、バージョン指定なし)

sudo apt update
sudo apt install docker-ce

インストールされたdockerバージョンの確認

sudo docker --version

ここからは docker の操作になるため割愛するが基本的なコマンドが動くことは確認済み。

さて、ここまででWSL2上でdockerを動かすことは確認できたのだが、次は Podman も試してみようと思うので、一旦ここまでやった事を初期化する・

Linuxディストリビューションの削除

Linux環境の削除
(ここに入る前に、色々とディストリビューションをいじってしまったので、上の状態と違うのはお許しを)

ディストリビューションの一覧確認

cmd または powershell
wsl --list --all
  NAME      STATE           VERSION
* Ubuntu    Stopped         2

指定のディストリビューションの削除

wsl --unregister Ubuntu

Linux環境の初期化
おそらく、削除しなくてもエラーにはならない気もするが、消さないと残ってしまいそうなので。
以下フォルダを直接手動で削除する。

C:\Users\<ユーザー名>\AppData\Local\Packages\CanonicalGroupLimited.<ディストリビューション名>_<識別子>\LocalState

おまけ

EC2上に作った Windows Server の適当なインスタンスでも上記の流れを試してみたが、実はうまく行かなかった。
OSがServerであることよりも、EC2という仮想環境の上で、wslという仮想環境を動かすことがダメっぽい。(おそらく、ハードと密接に関わる機能が制限されている事が原因)
EC2上のWindowsインスタンスでも、Linuxコンテナを起動させる方法は今整理しているため、またそれも記事にしたいと思う。

Discussion