検索
連載

実録:Windows ServerコンテナでSQL Serverを動かしてみたvNextに備えよ! 次期Windows Serverのココに注目(46)(3/3 ページ)

Windows Server 2016の新機能であるコンテナ管理技術「Containers」および「Windowsコンテナ」は、まだまだ不明な部分が多いです。ですが、Windows ServerコンテナでSQL Serverを動かせるという情報を得たので実際に確認したことをご紹介します。

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

SQL Management Studioをコンテナ内のSQL Serverインスタンスに接続してみる

 SQL Server 2014 SP1 Expressのインスタンスが動作していることは、コンテナ内で「Get-Service」コマンドレットでサービスの稼働状況を参照することで確認できます。

 インスタンスへのリモートからの接続が可能であるかどうかを調べるには、コンテナホストまたは別のWindows PCにインストールされた「SQL Server Management Studio」(GUIのSQL Server管理ツール:無償)を接続して試してみるとよいでしょう。

 コンテナのネットワークは、コンテナホストが提供するNAT(Network Address Translation:ネットワークアドレス変換)が構成されたサブネットに接続され、コンテナホストからはファイアウォールを経由することなくIPアドレスでアクセスできます。

 コンテナホストから試してみたところ、接続は失敗しました(画面7)。ここまですっかり忘れていましたが、SQL Server 2014 Expressは既定でリモート管理が「無効」になっていることが接続失敗の原因でした。

画面7
画面7 SQL Server 2014 Expressへのリモート管理接続は既定で「無効」になっている

 GUIの管理ツールを使用せずに、コマンドライン環境だけでSQL Server 2014 Expressでリモート管理を許可するには「sqlcmd」ユーティリティーを使う方法があります。

 sqlcmdユーティリティーは既定でインストールされますが(C:\Program Files\Microsoft SQL Server\Client SDK\DDBC\110\Tools\Bin\SQLCMD.EXE)、インストール直後は環境変数に追加されたパスが反映されていません。そこで、いったんコンテナを停止し、再び起動してからsqlcmdユーティリティーを使用して「sp_configure 'remote admin connections',1」を実行してリモート管理を許可します(画面8)。

[MySQLExp01]: PS C:\Windows\System32> Exit
PS C:\> Stop-Container -Name "MySQLExp01"
PS C:\> Startop-Container -Name "MySQLExp01"
PS C:\> Enter-PSSession -ContainerName "MySQLExp01" -RunAsAdministrator
[MySQLExp01]: PS C:\Windows\System32> Stop-Service "MSSQL`$SQLEXPRESS"
[MySQLExp01]: PS C:\Windows\System32> sqlcmd -S .\SQLEXPRESS -U sa -P P@ssw0rd -Q "sp_configure 'remote admin connections',1"
[MySQLExp01]: PS C:\Windows\System32> sqlcmd -S .\SQLEXPRESS -U sa -P P@ssw0rd -Q "RECONFIGURE WITH OVERRIDE"
[MySQLExp01]: PS C:\Windows\System32> Start-Service "MSSQL`$SQLEXPRESS"
画面8
画面8 「sqlcmd」ユーティリティーを使用して、SQL Server 2014 Expressのリモート管理を許可する

 なお、コンテナホストの外部からコンテナ上のSQL Serverインスタンスへのアクセスを可能にするには、コンテナホストのWindows PowerShellで次のコマンドラインを実行し、NATの静的マッピングと「Windowsファイアウォール」の「ポートの許可」を構成してください。

PS C:\> Add-NetNatStaticMapping -NatName "ContainerNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 127.16.0.2 -ExternalPort 1433 -InternalPort 1433
PS C:\> New-NetFirewallRule -Name "TCP1433" -DisplayName "SQL TCP/1433" -Protocol TCP -LocalPort @(1433,1433) -Action Allow

SQL Server on Hyper-V Containerはできる? できない?

 今回は、Windows Server 2016のServer Coreインストールがベースの「WindowsServerCore」イメージを使ってWindows Serverコンテナを作成し、.NET Framework 3.5の機能やSQL Server 2014 SP1 Expressをインストールしました。

 WindowsコンテナにはWindows Serverコンテナの他にもう1つ、Hyper-Vコンテナがあります。Hyper-VコンテナでSQL Server 2014 SP1 Expressを同じように展開できるかというと、「できない」というのが結論になります。

 Hyper-Vコンテナは、Hyper-Vの仮想マシン環境でNano ServerのOS環境を動かし、Nano ServerのOS環境を共有するかたちで「NanoServer」イメージをHyper-Vコンテナとして実行します。

 Nano Serverは、.NET Frameworkのサブセットである「.NET Core」を含みますが、.NET Coreには.NET Framework 3.5の機能のサポートは含まれません。また、SQL Serverのセットアップは、Windowsインストーラー(.msi)に基づいています。Nano Serverは「Windows Installerサービス(msiserver)」および「Msiexec.exe」を搭載していないため、SQL Serverのセットアップを開始することができないのです。

 そして、Nano ServerにSQL Serverをインストールできないということは、Hyper-VコンテナにSQL Server 2014 SP1 Expressをインストールできないということでもあります。今後、Nano Serverに対応した別の方法が提供されるかもしれませんが、現時点ではできません。

筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。


Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る