実録:Windows ServerコンテナでSQL Serverを動かしてみた:vNextに備えよ! 次期Windows Serverのココに注目(46)(3/3 ページ)
Windows Server 2016の新機能であるコンテナ管理技術「Containers」および「Windowsコンテナ」は、まだまだ不明な部分が多いです。ですが、Windows ServerコンテナでSQL Serverを動かせるという情報を得たので実際に確認したことをご紹介します。
SQL Management Studioをコンテナ内のSQL Serverインスタンスに接続してみる
SQL Server 2014 SP1 Expressのインスタンスが動作していることは、コンテナ内で「Get-Service」コマンドレットでサービスの稼働状況を参照することで確認できます。
インスタンスへのリモートからの接続が可能であるかどうかを調べるには、コンテナホストまたは別のWindows PCにインストールされた「SQL Server Management Studio」(GUIのSQL Server管理ツール:無償)を接続して試してみるとよいでしょう。
- SQL Server Management Studio(日本語、JPN\x64\SQLManagementStudio_x64_JPN.exeまたはJPN\x86\SQLManagementStudio_x86_JPN.exe)
コンテナのネットワークは、コンテナホストが提供するNAT(Network Address Translation:ネットワークアドレス変換)が構成されたサブネットに接続され、コンテナホストからはファイアウォールを経由することなくIPアドレスでアクセスできます。
コンテナホストから試してみたところ、接続は失敗しました(画面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"
なお、コンテナホストの外部からコンテナ上の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.