WSLを使い始めるうちに、Windowsコンテナを調べ始めた。
Windowsにコンテナ技術が搭載された。WindowsでもLinuxでもゲストとして動作させることができるのだが、Microsoftはその運用管理ツールを提供していない。運用管理にはDockerを用いることになっている。
そこでDockerについて調べ始めたところ、Dockerコンテナをエクスポートして、それをWSLへインポートできることを知った。それを試してみたところ、本当にWSL上で動作しているのだ。
これを確認したときは、一周回って、螺旋を一段上がったような気分だった。
この方法を利用することで、Microsoft Storeでは提供されていないディストリビューションでも、WSL上に環境構築することができる。例えばDocker Hubで公式イメージが配布されているarchlinux、alpine、CentOSのようなディストリビューションだ。そして、もちろんClear Linux OSも。
環境、前提条件など
この投稿では、次の環境を用いてる。
以降の記述内容は、すでにDockerとWSL2が導入され、稼働済みであることを前提にしている。
WSLへインポートするディストリビューションはClear Linux OSとしているが、インポートまでの操作は、どのディストリビューションでも共通に機能するはずだ。
また記述内容の設定は、参照資料が指し示すものとは異なる場合がある。例えば、私はDockerのWSL Integrationを利用していない。
また、WSLへインポートするまでのコマンド操作は全てPowerShellから行っており、Microsoft Storeから導入したディストリビューションからの操作も行っていない。つまり、ここで紹介する作業を実施するに際し、Microsoft StoreからUbuntuなどをインストールする必要もない。
🔎Docker > Settings > WSL Integration
Dockerコンテナからのファイル・システム取得、tarファイルのエクスポート
ここでは次の手順を経る。全ての操作はコマンドだけで完結できるし、一部ではGUI操作を取り入れても良い。
また出力するtarファイル名は任意でよい。
- Docker Hubから目的のディストリビューション・イメージを取得
- 取得したイメージを起動
- コンテナ名(NAMES)を確認
- コンテナ名を指定して、tarファイルへエクスポート
🔎コマンド
docker pull clearlinux docker run clearlinux docker container ls -a docker export --output="clearlinux.tar" angry_bhabha
🔎出力
WSLへのtarファイルのインポート
出力したtarファイルを、WSLへインポートする。インポートの前に、WSL上でのディストリビューション名、ディストリビューションの導入フォルダを特定しておく。
ここでは、次のように定義している。
ディストリビューション名 | Clear |
導入フォルダ | D:\user temp\wsl\clear |
Microsoft Store以外から任意のディストリビューションを導入する場合、導入イメージの初期化やアンインストールは、全てWSLコマンドで行うしかない。
本来、ディストリビューションはCドライブに導入することになっているのだが、長時間稼働、安定運用を想定しているわけでもなく、作って壊す管理の容易さを優先して、ここではDドライブにインストールしている。
The Windows Subsystem for Linux only runs on your system drive (usually this is your C: drive). Make sure that distributions are stored on your system drive:
次のコマンドでインポートすると、Clear LinuxがディストリビューションClearとして、WSLへ登録される。
🔎コマンド
wsl --import Clear "D:\user temp\wsl\Clear" .\clearlinux.tar wsl -l -v
🔎出力
Clear Linux OSの初期導入作業
ここからの作業はWSLのディストリビューション上で行う。作業環境として引き続きWSLを利用しても良いし、目的のディストリビューションに繋がりさえすれば、好みのターミナルを用いても良い。
Microsoft Storeから導入するディストリビューションと同様に、導入直後のディストリビューションは、ユーザーなどが定義されていない。Clear Linux OSの場合はsudoすら導入されていない。
Clear Linux OSではパッケージ群のことをバンドル(bundle)と呼ぶ。これは依存関係のあるパッケージ一式をまとめたもので、swupdを用いて管理する。
ここでの作業は次の手順を経る。
- 初回ログイン:rootでの作業
- 新規ユーザーの作成
- wsl.confの作成
- sudoの導入
- ディストリビューションからログオフ
wsl.confには、ディストリビューション接続時のデフォルト・ユーザーを定義する。次回接続時からは、指定ユーザーで自動的にログインできる。
🔎コマンド
useradd wsluser passwd wsluser usermod -G wheel -a wsluser cat << EOF > /etc/wsl.conf [user] default=wsluser EOF swupd bundle-add sudo exit
- 2度目のログイン:wsluserでの作業
- swupdのバンドル更新
- ディストリビューションからログオフ
🔎コマンド
sudo swupd update
exit
🔎出力
環境を作って壊すたびに、上記作業を繰り返すのは効率が悪い。ある程度作業を進めた状態のディストリビューションを保存しておき、再利用すれば、効率が良い。
最低限の環境が整った状態で、WSLディストリビューションをエクスポートしておく。今後は、このWSLから出力したtarファイルをインポートすることで、最低限の環境が整ったディストリビューションを手間なく用意することができる。
後はご自由に。
🔎コマンド
wsl -t Clear wsl -l -v wsl --export Clear E:\WSL\clearlinux.tar
バンドルについての詳細は、投稿末尾の資料を参照してほしい。ここでは、典型的なものを2つ挙げておく。
desktop | デスクトップ環境一式 |
sysadmin-basic | 運用環境一式 |