SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Windows Server 2016 の Windows コンテナーで SQL Server 2016 Express を動作させるための情報

leave a comment

 

で、しばやん先生が試されていますが、勉強かねて自分でも。

検証方法については、SQL Server 2016 Express Edition in Windows containers から確認をすることができます。

最初に Windows Server コンテナーを使用するための準備として、Windows Containers on Windows Server に記載されている作業を実施します。

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force

投稿を書いている時点の日本語版のドキュメントである Windows Server の Windows コンテナー では、情報が最新化されていない用で、手動で構成を行っているようですが、現状は上記の 3 つのコマンドで初期設定ができます。

以下の作業の自動化が行われているかと思います。

# zip ファイルの入手先は変わっているようですが。

Install-WindowsFeature containers
Restart-Computer -Force

Invoke-WebRequest "https://download.docker.com/components/engine/windows-server/cs-1.12/docker-1.12.2.zip" -OutFile "$env:TEMP\docker.zip" -UseBasicParsing

Expand-Archive -Path "$env:TEMP\docker.zip" -DestinationPath $env:ProgramFiles

# For quick use, does not require shell to be restarted.
$env:path += ";c:\program files\docker"

# For persistent use, will apply even after a reboot. 
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\Docker", [EnvironmentVariableTarget]::Machine)

dockerd.exe --register-service

Start-Service docker

これで、Windows コンテナーの実行環境の準備が整いましたので、SQL Server 2016 Express のイメージを Docker Hub から入手します。

docker pull microsoft/mssql-server-2016-express-windows

これで、「C:\ProgramData\docker\windowsfilter」にダウンロードされた、イメージが展開された状態となります。

あとは、コンテナーを起動します。

docker --% run --name sqlexpress -d -p 50001:1433 --env sa_password=M@sterEr0s microsoft/mssql-server-2016-express-windows

今回は、既に SQL Server がインストールされている環境に、コンテナーを起動しているため、50001 をコンテナーの 1433 に NAT する構成としています。

コンテナーを起動しているサーバーで接続するためには、Windows Server 2016: Docker 対応の手順が変わった に記載されているように、コンテナーの NAT の IP アドレスに対して接続を行います。

コンテナーで使用されている NAT の IP アドレスについては以下で確認できます。

(docker inspect sqlexpress | ConvertFrom-Json).NetworkSettings.Networks.nat.IPAddress
docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" sqlexpress

# コンテナーを起動している環境の NAT の情報の確認
Get-NetNat
Get-NetNatStaticMapping

これで、IP が確認できれば、以下のような形で、接続が可能です。

# 172.29.176.73 は docker inspect で確認した IP に置き換え
docker exec -it sqlexpress sqlcmd -U sa -P M@sterEr0s  -S "172.29.176.73" -Q "SELECT @@VERSION"
docker exec -it sqlexpress sqlcmd -S "172.29.176.73" -Q "SELECT @@VERSION"

docker exec で、Windows 認証で接続をした場合は、「User Management\ContainerAdministrator」というユーザーでの接続となっているようですね。

このイメージで使用している docker ファイルについては mssql-server-2016-express-windows で公開されているものになるのでしょうかね。

GitHub の情報では、DB をアタッチする方法も載っており、コンテナーとデータを分離する場合は、attach_dbs オプションを使用する形になるようですね。

新規にイメージを作成する場合は Build and run your first Docker Windows Server container を見るとよさそうでした。

再起動後も docker のコンテナーを自動的に起動する場合は、Linux の docker と同様に、docker run の際に、–restart を付ければよさそうですね。

docker --% run --restart always --name sqlexpress -d -p 50001:1433 --env sa_password=M@sterEr0s microsoft/mssql-server-2016-express-windows

Written by masayuki.ozawa

10月 16th, 2016 at 10:12 pm

Posted in SQL Server

Tagged with

Leave a Reply

*