SQL Server 2016 Express を Windows にインスコするより早く使えるようになった。Windows Containers かなり良いのでは pic.twitter.com/dPTJBR9ocg
? しばやん (@shibayan) 2016年10月15日
で、しばやん先生が試されていますが、勉強かねて自分でも。
検証方法については、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