Windows環境下でDockerを使う場合
はじめに
Dockerと言ったら基本はLinux系のOSで動かすことがほとんどだったのだが、日本企業ではWindowsサーバーを入れているところがそれなりに多いため、Windows環境でも問題なく動かせるものなのか実験してみた。(外国の企業でWindowサーバーが多く導入されているのかは知りませんが・・・)
前提環境
Windows 10 pro
WSL2(Ubuntu-20.04)
Dockerを使うための方法
Windows環境下でDockerを使おうとしたら、大きくは以下2案が主流と認識している。
- WSL上に Docker をインストール(Podman使ってdocker管理する場合もこちらに含む)
- 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用のディストリビューションを取得することも可能。
- スタートメニューを開いて、「Microsoft Store」と検索し、ストアを起動。
- ディストリビューションを検索してインストール(下図はUbuntu 20.04)
shell実行の場合でも、Microsoft Store
から取得した場合でも以下のフォルダが作られる。
C:\Users\<ログインアカウントの_ユーザー名>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_<ランダム文字列>
(手順2)Dockerをインストール
まずは、wsl2
を起動した状態で以下のコマンドを実施し、OSのバージョンを確認する。
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環境の削除
(ここに入る前に、色々とディストリビューションをいじってしまったので、上の状態と違うのはお許しを)
ディストリビューションの一覧確認
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
apt-key は非推奨になって久しいので、公式手順に従った方が良いですよ。