連載
» 2016年04月14日 05時00分 公開

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

[山市良,テクニカルライター]

SQL Server on Windows Serverコンテナの環境をマニュアルで構築してみた

 先日、マイクロソフトのSQL Server Database Engine Blog(英語)に「SQL Server in Windows Containers」という記事がポストされました。この記事では、Dockerコマンドを使う方法で、「SQL Server 2014 Express」のインスタンスを実行するWindowsコンテナを簡単に構築する手順が説明されていました。

 この記事では、コミュニティーで作成された「Dockerfile」を使用して作業しています。Dockerfileなら、入力するコマンドも少なく、誰でも簡単に実行できるので、操作ミスを排除できます。しかし、Dockerについて詳しくない人にとっては、何をしているのか理解するのが難しいかもしれません。

 WindowsコンテナはWindows PowerShellによるネイティブな管理方法と、Dockerコマンドによる管理方法に対応しています。どちらで管理する場合でも、Dockerfileで行っていることと同じ操作をコンテナに対して手動で操作すれば、SQL Serverの導入は可能なはずです。

 なお、筆者がこのDockerfileで実際に環境を構築したレポートを個人ブログに掲載しています。日本語環境が影響して、誰でも簡単にできるというわけにはいきませんでした。

 そこで今回は、Windows PowerShellによる操作で、Windows ServerコンテナにSQL Server 2014 Expressをインストールしてみました。作業の流れの概略は、以下の図1のようになります。

図1 図1 まずは「WindowsServerCore」から.NET Framework 3.5を含むイメージ「WindowsServerCoreNET35」を作成。「WindowsServerCoreNET35」から作成したWindows Serverコンテナに「SQL Server 2014 Express」をインストールする

 最初に、Windows Serverコンテナのベースイメージとして利用可能な、Windows Server 2016のServer Coreインストールベースのコンテナイメージ「WindowsServerCore」からWindows Serverコンテナを作成し、そこにSQL Server 2014の前提コンポーネントである「.NET Framework 3.5の機能」をインストールして、その時点までをカスタムイメージとして保存します。

 Dockerfileの方法では、Docker Hubから「microsoft/dotnet35」(「.NET Framework 3.5の機能」がインストールされたWindows Serverコンテナのイメージ)を入手して使用していますが、そのイメージを自分で作成すると考えてください。

 続いて、「.NET Framework 3.5の機能」がインストール済みのカスタムイメージからWindows Serverコンテナを作成し、そこにSQL Server 2014 Service Pack 1(SP1)Expressをインストールし、構成します。

「.NET Framework 3.5の機能」を含むイメージの作成

 「.NET Framework 3.5の機能」を含むイメージの作成は、「WindowsServerCore」イメージをベースにWindows Serverコンテナを新規作成し、そのコンテナにWindows Server 2016 TP4のメディアの「\Sources\SxS」のパッケージを指定して、「.NET Framework 3.5の機能」をインストールします。

 今回は、コンテナホスト上のフォルダをコンテナと共有して、コンテナホスト上のフォルダ「C:\Share」内にWindows Server 2016 TP4のメディアの「\Sources\SxS」およびSQL Server 2014 SP1 Expressのインストールソースを準備して使用しました(画面1)。

画面1 画面1 コンテナホストの「C:\Share」フォルダにコンテナにインストールする機能やアプリケーションのインストールソースを準備する

 コンテナ内で「wget(Invoke-WebRequest)」コマンドレットを実行し、インストールソースをダウンロードしてインストールすることもできますが、Containersが標準で提供する共有フォルダを使用すると、ダウンロードファイルによってコンテナのディスク使用量が増えてしまう(コンテナのファイルサイズが大きくなる)ことを避けることができます。

 作業用コンテナの作成、共有フォルダの準備、作業用コンテナの開始、「.NET Framework 3.5の機能」のインストール、コンテナの停止、コンテナのイメージ化、作業用コンテナの削除までの一連の操作は、コンテナホストのWindows PowerShellで次のコマンドラインを実行することで完了します(画面2画面3)。

PS C:\> New-Container -Name "MyWinSvCont01" -ContainerImageName WindowsServerCore -SwitchName "Virtual Switch"
PS C:\> Add-ContainerSharedFolder -ContainerName "MyWinSvCont01" -SourcePath C:\Share -DestinationPath C:\Packages
PS C:\> Start-Container -Name "MyWinSvCont01"
PS C:\> Enter-PSSession -ContainerName "MyWinSvCont01" -RunAsAdministrator
[MyWinSvCont01]: PS C:\Windows\System32> Add-WindowsFeature -Name NET-Framework-Core -Source C:\Packages\ws2016tp4enSxS
[MyWinSvCont01]: PS C:\Windows\System32> Exit
PS C:\> Stop-Container -Name "MyWinSvCont01"
PS C:\> New-ContainerImage -ContainerName "MyWinSvCont01" -Name "WindowsServerCoreNET35" -Publisher demo -Version 1.0
PS C:\> Remove-ContainerImage -Name "MyWinSvCont01"
PS C:\> Get-ContainerImage
画面2 画面2 コンテナイメージ「WindowsServerCore」から作業用コンテナを作成し、共有フォルダを構成して、コンテナを開始する
画面3 画面3 作業用コンテナに「.NET Framework 3.5の機能」をインストールしたらコンテナを停止し、新しいコンテナイメージ「WindowsServerCoreNET35」として保存する

 今回は、「.NET Framework 3.5の機能」をインストールした時点で、新しいコンテナイメージ「WindowsServerCoreNET35」として保存していますが、作業用コンテナのままSQL Server 2014 SP1 Expressのインストールに進むことも可能です。新しいコンテナイメージとして保存しておけば、以後、SQL Server 2014 SP1 Express以外の用途でも「.NET Framework 3.5の機能」のインストールを省略できるというメリットがあります。

SQL Server 2016 SP1 Expressのインストールと構成

 次に、新しいコンテナイメージ「WindowsServerCoreNET35」をベースに新しいコンテナを作成し、SQL Server 2014 SP1 Expressをインストールします。大本のベースイメージが英語版であるため、英語版のSQL Server 2014 SP1 Expressをインストールします。

 コンテナホストのWebブラウザを使用して、以下のWebサイトから「SQL Server 2016 SP1 Express英語版」(SQLEXPR_x64_ENU.exe)をダウンロードします。

 「SQLEXPR_x64_ENU.exe」のダウンロードが完了したら、コマンドプロンプトを開いて、ダウンロード先のパスから次のコマンドラインを実行し、「C:\Shares」フォルダの下の場所にファイルを展開します(画面4)。

SQLEXPR_x64_ENU.exe /q /X:C:\Share\sql2014exen\Setup


画面4 画面4 コンテナホストの「C:\Share」フォルダの下に「SQLEXPR_x64_ENU.exe」のファイルを展開する

 コンテナイメージ「WindowsServerCoreNET35」をベースに新しいコンテナ「MySQLExp01」を作成し、共有フォルダを設定して、コンテナを開始します。コンテナに接続したら、SQL Server 2014 SP1 Expressのサイレントインストールを実行します(画面5)。

PS C:\> New-Container -Name "MySQLExp01" -ContainerImageName WindowsServerCoreNET35 -SwitchName "Virtual Switch"
PS C:\> Add-ContainerSharedFolder -ContainerName "MySQLExp01" -SourcePath C:\Share -DestinationPath C:\Packages
PS C:\> Start-Container -Name "MySQLExp01"
PS C:\> Enter-PSSession -ContainerName "MySQLExp01" -RunAsAdministrator
[MySQLExp01]: PS C:\Windows\System32> cd C:\sql2014exen\Setup
[MySQLExp01]: PS C:\Windows\System32> .\setup.exe /q /ACTION=Install /INSTANCENAME=SQLEXPRESS /FEATURES=SQLEngine /UPDATEENABLED=1 /SECURITYMODE=SQL /SAPWD="P@ssw0rd" /SQLSVCACCOUNT="NT AUTHORITY\System" /AGTSVCACCOUNT="NT AUTHORITY\Network Service" /SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS" /INSTALLSQLDATADIR=C:\SQLEXPRESS\DATA /SQLUSERDBLOGDIR=C:\SQLEXPRESS\DATA /SQLBACKUPDIR=C:\SQLEXPRESS\BACKUP /TCPENABLED=1 /NPENABLED=0 /IACCEPTSQLSERVERLICENSETERMS
画面5 画面5 コンテナイメージ「WindowsServerCoreNET35」をベースに新しいコンテナ「MySQLExp01」を作成、開始し、SQL Server 2014 SP1 Expressのサイレントインストールを実行する

 SQL Server 2014 SP1 Expressのサイレントインストールが完了したら、TCPポート「1433」を設定して「MSSQL$SQLEXPRESS」サービスを開始します(画面6)。なお、Windows PowerShell内で「$」は特別な意味を持つため、「`$」のようにエスケープする必要があることに注意してください。

[MySQLExp01]: PS C:\Windows\System32> Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\ipall" -Name TcpDynamicPorts -Value ""
[MySQLExp01]: PS C:\Windows\System32> Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\ipall" -Name TcpPort -Value 1433
[MySQLExp01]: PS C:\Windows\System32> Start-Service MSSQL`$SQLEXPRESS
画面6 画面6 SQL Server 2014 SP1 ExpressのインスタンスでTCPポート「1433」を使用するように構成し、「MSSQL$SQLEXPRESS」サービスを開始する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。