wsl-toyc
docker container を WSL (Windows 10 Fall Creators Update) 上に移植してみる。
docker container の準備
ここでは、Windows にポーテイングされていない Redis 4.0系 を動かしてみます。
docker の稼働する環境で、移植したいコンテナーを作成します。
$ # docker container を作成
$ docker pull redis:4.0
$ docker create --name redis4 redis:4.0
WSL distribution の作成
WSL 上に distribution を登録して、起動します。
管理者権限 でない 通常のコマンドプロンプトを開きます。
> rem ツールのダウンロード (お好みのプログラムで)
> curl -LO https://github.com/noumia/wsl-toyc/releases/download/v1.0/wsl-toyc.zip
> 7za x wsl-toyc.zip
> rem 環境用のフォルダーを準備して rootfs ファイル等を配置する
> mkdir redis4
> move create-toyc.exe redis4
> rem docker container のイメージファイル作成
> rem docker の稼働している環境から rootfs.tar.gz ファイルを転送しても可
> docker export redis4 | gzip -c - > redis4\rootfs.tar.gz
> rem redis4 環境を作成する (フォルダー名がそのままディストリビューション名になる)
> redis4\create-toyc.exe
> rem 起動用実行ファイルの準備 (実行ファイル名をディストリビューション名にリネーム)
> ren launch-toyc.exe redis4.exe
> rem redis-server の起動
> redis4 /bin/bash -c "cd /data && docker-entrypoint.sh redis-server"
> rem Ctrl-C 押下で redis-server は終了します。
起動コマンドの引数が煩雑になりますが、Dockerfile に記述されている設定情報が反映されないため、同等の動作を行うコマンドを記述する必要があります。
動作確認のため、別のコマンドラインプロンプトを開き、クライアントツールを起動します。
> redis4 redis-cli PING
PONG
WSL distribution の削除
WSL ディストリビューション環境上に作成されたファイルは、すべて 削除 されます。
> wslconfig /u redis4
再利用をしない場合は、redis4 フォルダー, redis4.exe ファイルを削除します。
ディストリビューション削除後 redis4\create-toyc.exe を再実行すると、環境は初回起動の状態に戻ります。
動作のしくみ
2 つのプログラムから構成されていています。
名称 | 動作 |
---|---|
create-toyc.exe | rootfs.tar.gz をもとに WSL distribution を新たに作成 |
launch-toyc.exe | WSL distribution のランチャープログラム (使用時にはリネーム) |
作成時、WSL API の WslRegisterDistribution 関数を使用しますが、Linux ファイルシステムの展開先に呼び出しプロセスの実行ファイルの場所が使われる仕様なので、使用したい環境のインスタンス毎に実行ファイルを作成する必要があります。
create-toyc.exe では、ベースのフォルダー名をそのままディストリビューション名として、登録を行います。
ソースとしたい rootfs.tar.gz ファイル (ファイル名固定) は、create-toyc.exe と同じ場所に配置してください。
rootfs.tar としては、docker export コマンドで出力されるコンテナのファイルが使用できます。(gzip で圧縮が必要)
docker save で出力されるイメージファイルは、形態が異なるため、そのままでは使用できません。
大抵の docker コンテナは動作できると思われますが、glibc をベースとしないものは動作できません。そのため busybox や alpine をベースとしたコンテナは、動きません。
create-toyc.exe ファイルを別々の場所にコピーすることで、環境はいくつでも作成することができます。(ディストリビューション名はユニークにする必要があります。)
登録されているディストリビューション名は、wslconfig /l コマンドで確認できます。
登録すると create-toyc.exe ファイルの場所の rootfs 以下に Linux のファイルシステムが展開されますが、これらのファイルは、Windows 側のアプリからはアクセス禁止とされています。(ファイル破損の原因となります。)
Linux プログラムを起動する場合は、launch-toyc.exe を使用しますが、ファイル名を起動したいディストリビューション名にリネームしてください。
実行ファイル名 (拡張子除く) をディストリビューション名として抽出して、起動する仕掛けになっています。
引数なしで実行したときは、シェル (bash) が起動します。
ランチャープログラムの配置は、任意の場所でかまいません。
コピーライトについて
このプロジェクト (https://github.com/noumia/wsl-toyc) のコード著作権は、パブリックドメインにあるものとします。