はじめに
転職してから開発環境がMac→Windowsと変更になり、色々と試行錯誤している最中です。 windowsでの開発、となるとwindowsデスクトップアプリケーション等のを除いた一般的なweb/ネイティブアプリケーションの開発はunix環境で行うのが一番ベストなので、 そうなるとwsl2を使うのが一番良い選択肢だと思う。
wsl2はディストロ(≒ディストリビューション)をdocker imageのように使えない
見出しの通りなのだが、例えばdockerでubuntuのイメージを使いまわしたい場合は、docker hubで公式のイメージを引っ張ってくるか、自分でビルドしておいたイメージを利用すればいい。
wsl2も一見同じようなことができそうなのだが、基本的にはできない。(そもそもそのケースならdocker使えよ、という議論はなしでお願いします)
とにかく今回はそういったdockerライクなユースケースに対応するための準備をしておく。
1. 任意のディストロをインストール
詳細は公式docを参照されたいが、以下コマンドでインストール可能なディストリビューションを表示できる。
> wsl --list -o インストールできる有効なディストリビューションの一覧を次に示します。 'wsl --install -d <Distro>' を使用してインストールします。 NAME FRIENDLY NAME Ubuntu Ubuntu Debian Debian GNU/Linux kali-linux Kali Linux Rolling openSUSE-42 openSUSE Leap 42 SLES-12 SUSE Linux Enterprise Server v12 Ubuntu-16.04 Ubuntu 16.04 LTS Ubuntu-18.04 Ubuntu 18.04 LTS Ubuntu-20.04 Ubuntu 20.04 LTS $ wsl --install -d Ubuntu-20.04
今回はUbuntu-20.04
を選択する。
2. ディストロをエクスポートする
dockerで言うところのcommit
コマンド。
1のようにコマンドでインストールした場合、ディストロは以下ディレクトリにある。
C:\Users\<username>\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\
エクスポートするには--export
コマンドで以下のように実行する。
wsl --export <エクスポートするdistro> <保存名>
バックアップの保存先として、package
以下にdistro_backup
を作成した。
今回は先程インストールしたUbuntu-20.04を選択したいので以下のよう実行する。
wsl --export Ubuntu-20.04 C:\Users\<username>\AppData\Local\Packages\distro_backup\Ubuntu-20.04.tar
3. ディストロをインポート(複製)する
dockerで言うところのbuild
に近いところ、docker:container=linux:distribution みたいな感じ。
importではディストロに対して名前を個別につけることができるので、当初の目的であったディストリビューションの複製が可能になる。
wsl --import <ディストリビューションにつける名前><インポートに利用するdistroのパス> <インストール先> <ファイル名>
なお、追加可能なオプションとしてversion
があるが、これはおそらくwslバージョンなので、未指定な場合はset-default-version
で指定しているバージョンになると思われる。(多分)
今回自分はk8s用の環境を分離することが目的だったためubuntu-20.04-k8s
という名前で作成する。
$ wsl --import Ubuntu20.04-k8s 'C:\Users\<username>\AppData\Local\Packages\Ubuntu20.04-k8s' 'C:\Users\<username>\AppData\Local\Packages\distro_backup\Ubuntu-20.04.tar' $ wsl --list Linux 用 Windows サブシステム ディストリビューション: Ubuntu-20.04 (既定) docker-desktop docker-desktop-data Ubuntu20.04-k8s
無事追加できた。
ログインは以下でできる。
$ wsl -d Ubuntu20.04-k8s
なおエクスポートに利用したディストリビューションは削除してもok(2でエクスポートしたディストロがあれば複製可能)