Windows 10 20H2 に WSL2 をインストールしてSQL Server/Redisを起動してみた

小浜です。

今回はWindows 10 20H2 に WSL 2 をインストールして、その中でSQL ServerとRedisを起動してみます。

WSL2とは

  • 参考 https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html 完全なLinuxがWindows 10上で稼働する? 「WSL 2」とは:Windows 10 The Latest – @IT

WSL2は、専用の仮想マシン環境である「Light Weight utility Virtual Machine」(軽量ユーティリティーVM)を使い、ローカルパッチ(Microsoftによる独自パッチ)を当てたLinuxカーネルバイナリを動作させ、仮想マシン内にLinuxの実行環境を作ったものとのことです。

WSL2側は、ホスト機であるWindows PCとは別のIPアドレスを持っていて、別の仮想マシンと考えて良いです。
起動は約2秒と高速なので快適です。

WSL2側からは Cドライブが /mnt/c/ 以下にマウントされて見えており、
WSL2側からホスト機であるWindows PC側のファイルを(若干遅いですが)読み書きできます。

WSL2のインストール

  • 参考 https://docs.microsoft.com/ja-jp/windows/wsl/install-win10 Windows Subsystem for Linux (WSL) を Windows 10 にインストールする | Microsoft Docs
  • 参考 https://docs.microsoft.com/en-us/windows/wsl/install-win10 Install Windows Subsystem for Linux (WSL) on Windows 10 | Microsoft Docs
  • 参考 https://www.kkaneko.jp/tools/wsl/wsl2.html WSL 2 のインストール,Ubuntu 20.04, 18.04 のインストールと利用

■ WSL2 インストール

管理者権限のPowerShellから実施します。

以下は古いのが有効になっている場合の表示例

  • デフォルト起動の指定
  • wslの起動

WSL2 Ubuntu 20.04 LTS セットアップ

  • 参考 https://qiita.com/v2okimochi/items/f53edcf79a4b71f519b1 Windows10 WSL2にLinux居城を爆誕させる – Qiita
    WSL2の中のUbuntuの設定関連はココ

ここでは、WSL2の中にインストールしたUbuntuの設定を行います。

■ wslの起動

■ WSL2の中のUbuntu 20.04の設定

  • sudo可能ユーザーを追加します。

以下のようにsudoersに記載してユーザーgeorgeをsudo可能にします。
ユーザー名は各自のものに読み替えてください。

  • ロケールの指定
  • 便利コマンドのインストール

WSL2側のIPアドレスをhostsに登録する

WSL2のデフォルト設定では、WSL2側のIPアドレスはWindows PCとは違うものがついていて、起動する毎に毎回ランダムに変わります。

また、内部の仮想DHCPサーバからのIPアドレスリース時間はおそらく9時間から24時間程度と予想されるため、長時間起動し続けるような使い方は向いていないようです。

Windows PCのPowerShellとかから、wsl ip a とすれば上のような表示が得られるので、
文字列加工して C:Windows/System32/drivers/etc/hosts を編集する MSYS2 bash スクリプトを参考までに以下に示します。
hostsファイルを書き換えるためAdministratorsの特権がついた状態で実行する必要です。

hostsファイルに記入すれば、Windows側からは、wsl2.hyperv.local というホスト名でアクセスすれば、wsl2側のIPアドレスに到達できます。

(別解)WSL2側のLISTENポートをWindows側からアクセス可能なように設定する

  • 参考 https://roy-n-roy.github.io/Windows/WSL%EF%BC%86%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A/wslconfig/ wsl.conf と .wslconfig – roy-n-roy メモ

なお、.wslconfig の設定次第では以下のような設定があるので、WSL2側でLISTENしているポートがあれば、Windows PC側でLISTENしているように見せかける設定があるようです。

つまり、http://localhost:3000/ とかにアクセスすると、実はWSL2側で動作している node express に行く、というようなことも可能とのことです。

WSL2 Ubuntu 20.04 Docker 環境構築

  • 参考 https://qiita.com/amenoyoya/items/ca9210593395dbfc8531 WSL2 + Ubuntu 20.04 + Docker 開発環境構築 – Qiita

WSL2を使うDocker環境構築では、Docker for Windows Desktop (WSL2対応版) をインストールして使うのが普通です。

ここでは WSL2 Ubuntu側にストレートにLinux用のDockerパッケージをインストールしてみます。

以下、Qiitaの記事のそのまんまですが、WSL2へのDockerのインストール方法を紹介します。

WSL2のUbuntu上での操作を示します。

WSL2スタートアップ時にdocker serviceを起動するハック

  • 参考 https://qiita.com/amenoyoya/items/41a2334cbc1facb87864 WSL2でスタートアップスクリプトを実行するHack – Qiita

wsl起動時にdocker serviceを開始するハックです。
これまたQiitaの記事のそのまんまですが紹介します。

WSL2のUbuntuは起動時に各種デーモン(Windowsでいうサービス)を起動しないため非常に高速に起動するのは良いですがちょっと不便な面もあります。
Docker用のデーモンをWSL2起動する毎に手動で起動しないといけないのです。
このハックを使うと、Docker用のデーモンをWSL2起動時に自答的に開始することができます。

WSL2のUbuntu上での操作を示します。

Microsoft SQL Server の docker image を使う

  • 参考 https://hub.docker.com/_/microsoft-mssql-server Microsoft SQL Server
  • 参考 https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-docker-container-deployment?view=sql-server-ver15&pivots=cs1-bash SQL Server Docker コンテナーをデプロイして接続する – SQL Server | Microsoft Docs
  • 参考 https://ittech-nsnl.hatenablog.com/entry/2019/10/27/003013 DockerでSQL Server環境を構築する – ITエンジニア日記 ~NO SKILL, NO LIFE~

Dockerの動作サンプルとして、Microsoft SQL ServerのLinux版のDockerイメージを使ってみます。

WSL2のUbuntu上での操作を示します。

Microsoft SQL Server のコンテナの中での操作。 SQL Serverを操作するコマンドラインツール sqlcmd を起動します。

sqlcmdの中の操作で、データベースの作成を行います。GOが必用なのが特徴的ですね。

最後のQUITでsqlcmdから脱出します。

SQL serverのdockerの中から脱出する。

以上で、SQL Serverが起動しました。

Redis image を使う

  • 参考 https://hub.docker.com/_/redis redis
  • 参考 https://qiita.com/masataka715/items/abfd4b870024cbcebda7 Dockerで簡単にRedis試す – Qiita

上の記事通りに作っていきます。docker-composeを使っています。

作業用のディレクトリ testbed を作って、その中に docker-compose file を作ります。

WSL2のUbuntu上での操作を示します。

以上で、Redisのサーバーが起動しました。

あとがき

Windows PC側からは、wsl2.hyperv.local:1433 や、 wsl2.hyperv.local:6379 でアクセスすることができます。

開発用の通信相手や、動作検証用のWEB/APIサーバとしても利用できます。

アプリのバージョン毎に検証用サーバを切り替えて起動するなんて使い方も考えられます(相応のディスク容量は必要ですが)。

Linux版のDockerイメージで提供されているJupyter Notebook のdockerイメージも起動できるので、色々役に立つと思います。

LINEで送る
Pocket