SQL Server Database Engine Blog|SQL Server in Windows Containers
[URL] https://blogs.msdn.microsoft.com/sqlserverstorageengine/2016/03/21/sql-server-in-windows-containers/
なお、SQL Server のセットアップは Windows Installer ベースなんで、.NET Framework 3.5 Features と msiexec に対応していない Nano Server ベースの Hyper-V Container では SQL Server の展開は NG のはず。
とりあえず、まずは経験。実際にやってみました。やってみて初めてわかることは多し。
まず、https://github.com/brogersyh/Dockerfiles-for-windows/tree/master/sqlexpress から dockerfile、Set-SQLExpressStaticTcpPort.ps1、start.ps1、mode-dirs-and-stop-service.ps1 をダウンロードして、コンテナー ホストの C:\sqlexpress に配置。
Windows PowerShell を開いて、C:\sqlexpress に移動し、docker build コマンドを実行。
PS C:\sqlexpress> docker build -t sqlexpress .
Step 8 で失敗。
日本語環境では、よくあるあるトラブルの予感。こんなときは、コンテナー ホストに英語(en-us) 言語パックをインストールして、システム ロケールを en-us に変更、再起動してから、再実行。
思ったとおり、進んだぞ...
... Step 16 で完了!
sqlexpress イメージの作成はこれで完了。このイメージから Windows Server コンテナーを作成し、実行してみる。SQL Server インスタンス名は SQL、SQL Server 認証が有効、sa アカウントのパスワードは thepassword2# 。これらの情報は Dockerfile の内容: RUN /install/setup/setup.exe ... のオプション指定で確認できます。
PS C:\> docker run -it --name "mysqlexp01" -p 1433:1433 sqlexpress cmd
C:\Install> powershell
PS C:\Install>.\start.ps1
PS C:\Install> Get-Service *SQL*
成功。コンテナー ホストや別の PC に SQL Server Management Studio を入れてリモート接続して確認。接続できない場合は、コンテナー ホストのファイアウォールを確認して。
例 (コンテナー ホストで実行):
PS C:\> New-NetFirewallRule -Name "TCP1433" -DisplayName "SQL TCP 1433" -Protocol TCP -LocalPort @(1433,1433) -Action Allow
PS C:\> sqlcmd -S .\SQLEXPRESS -U sa -P thepassword2# -Q "sp_configure 'remote admin connections', 1"
PS C:\> sqlcmd -S .\SQLEXPRESS -U sa -P thepassword2# -Q "RECONFIGURE WITH OVERRIDE"
PS C:\> Stop-Service MSSQL`$SQL
PS C:\> Start-Service MSSQL`$SQL
・・・
Dockerfile を使用した方法は、いろいろ自動的に行ってくれますけど、Docker を触ったことが無い人やかじっただけの人(私)にとっては??? な感じだと思います。
Dockerfile に書いてあることや以下のドキュメントを参考に、すべてマニュアルで一つ一つ実行していけば、SQL Server を動かすまでできるはず (Docker じゃなくて、New-Container とかの PowerShell でも OK) 。っていうか、人が作った Dockerfile を使うよりも確実だし、こんなに苦労 (日本語環境特有の対応) することもないっす。
参考:
.NET 3.5 Server Core コンテナー イメージの作成
[URL] https://msdn.microsoft.com/ja-jp/virtualization/windowscontainers/examples/dotnet35
.NET Framework 3.5 Features は、DVD:\Sources\SxS (英語版メディアでも日本語版メディアでも同じ) を指定してインストール
コマンド プロンプトからの SQL Server 2014 のインストール
[URL] https://msdn.microsoft.com/ja-jp/library/ms144259(v=sql.120).aspx
(dockerfile https://github.com/brogersyh/Dockerfiles-for-windows/blob/master/sqlexpress/dockerfile の setup.exe のオプションも参考に)
TCP 1433 リモート接続の許可 (dockerfile https://github.com/brogersyh/Dockerfiles-for-windows/blob/master/sqlexpress/dockerfile より)
PS> Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\ipall" -Name TcpDynamicPorts -Value ""PS> Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\ipall" -Name TcpPort -Value 1433
PowerShell からの SQL Server 名前付きインスタンスのサービスの開始は、$ をエスケープしてね
Start-Service MSSQL`$SQL
(サービス名が MSSQL$SQL の場合)
------------------------------------------------------------------------------
Docker ではなく PowerShell の管理環境でマニュアルでなんとかする汎用的な例
(解説省略しますが、この方法なら en-us 言語パックのインストールやシステム ロケールの変更は不要です。実は、docker build -t sqlexpress . をやってみる前にこっちをやってみました。成功するはずでっす)
Provisionig Install Source for .NET Framework 3.5 Features and SQL Server 2014 SP1 Express.
Copy <DVD>:\Sources\SxS\Microsoft-windows-netfx3-ondemand-package.cab to C:\Share\ws2016tp4enSxS
Download SQL 2014 SP1 Express (English) Installer from https://www.microsoft.com/en-US/download/details.aspx?id=46697
Copy SQLEXPR_x64_ENU.exe (download from ) C:\Share\sql2014exen and Extract it by C:\Share\sql2014exen\SQLEXPR_x64_ENU.exe /q /X:C:\Share\sql2014exen\Setup
Create .NET Framework 3.5 Features insalled image (WindowsServerCoreNET35).
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-Container -Name "MyWinSvCont01"
Install SQL 2014 SP1 Express to Windows Server Container
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:\Packages\sql2014exen\Setup
[MySQLExp01] PS C:\Packages\sql2014exen\Setup2> .\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
[MySQLExp01] PS C:\Packages\sql2014exen\Setup2> Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\ipall" -Name TcpDynamicPorts -Value ""
[MySQLExp01] PS C:\Packages\sql2014exen\Setup2> Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQLServer\SuperSocketNetLib\Tcp\ipall" -Name TcpPort -Value 1433
[MySQLExp01] PS C:\Packages\sql2014exen\Setup2> Start-Service MSSQL$SQLEXPRESS
[MySQLExp01] PS C:\Packages\sql2014exen\Setup2> Exit
PS C:\> stop-container -Name "MySQLExp01"
PS C:\> start-container -Name "MySQLExp01"
PS C:\> Enter-PSSession -ContainerName "MySQLExp01" -RunAsAdministrator
[MySQLExp01] PS C:\Windows\System32> sqlcmd -S .\SQLEXPRESS -U sa -P P@ssword -q "sp_configure 'remote admin connections', 1"
[MySQLExp01] PS C:\Windows\System32> sqlcmd -S .\SQLEXPRESS -U sa -P P@ssword -q "RECONFIGURE WITH OVERRIDE"
[MySQLExp01] PS C:\Windows\System32> stop-service MSSQL`$SQLEXPRESS
[MySQLExp01] PS C:\Windows\System32> start-service MSSQL`$SQLEXPRESS
Add NetNATStaticMapping and Filewall Rule on Container Host
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
------------------------------------------------------------------------------
Have fun !
追記)
こちらもどうぞ。dockerfile を使用せず、マニュアルでインストールしたレポート...
@IT 実録:Windows ServerコンテナでSQL Serverを動かしてみた
[URL] http://www.atmarkit.co.jp/ait/articles/1604/14/news022_2.html
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。