今まで、SQL Server の Express Edition であれば、Windows Container で実行することができていました。
SQL Server 2016 Express Edition in Windows containers
SQL Server vNext になると、Linux / Windows / Mac の Docker でも動作するようになりました。
Run the SQL Server Docker image on Linux, Mac, or Windows
Ubuntu と Windows のコンテナーとして実行してみたいと思います。
# Mac はハード持っていないので…。
まず最初に実行環境の整備ですが、Windows 版の場合は、Windows Container の機能を追加すればよいかと。
# 以前、SQL Server Express を実行する際に使ったものをそのまま流用しています。
Windows Containers on Windows Server
Windows 以外については、 Get Docker のドキュメントの内容で Docker をインストールすればよいかと。
今回は、Ubuntu 16.04 を使用していますので、Install Docker on Ubuntu の内容を元にインストールをしています。
Docker の実行環境が整えば、あとはイメージを Pull して実行するだけです。
Windows 用 / Linux 用のイメージが別々に提供されているので、実行プラットフォームに合わせたイメージを取得します。
-- Windows で実行する場合 docker pull microsoft/mssql-server-windows -- Linux / Mac で実行する場合 docker pull microsoft/mssql-server-linux
これで、イメージが Pull されるので、あとはコンテナーを実行するだけです。
-- Windows (現状、sa_password の環境変数の指定は小文字の必要がありそう) docker run --name sqlvnext -e 'ACCEPT_EULA=Y' -e 'sa_password=M@sterEr0s' -p 11433:1433 -d microsoft/mssql-server-windows (docker inspect sqlvnext | ConvertFrom-Json).NetworkSettings.Networks.nat.IPAddress $ip = docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" sqlvnext sqlcmd.exe -S $ip -U sa -P "M@sterEr0s" -Q "SELECT @@VERSION" -- Linux sudo docker run --name sqlvnext -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=M@sterEr0s' -p 11433:1433 -v /var/opt/mssql-docker:/var/opt/mssql -d microsoft/mssql-server-linux sqlcmd -S .,11433 -U sa -P "M@sterEr0s" -Q "SELECT @@VERSION"
Windows 版の Docker で実行したものがこちらです。
Windows コンテナーで動作させていますので、OS としては Windows Server 2016 で動作しているように見えます。
Ubuntu 版の Docker で実行したもの がこちらです。
現時点の Ubuntu の方はベース OS が 15.10 として認識されているようでした。
Windows 版については Windows Server 2016 の Windows コンテナーで SQL Server 2016 Express を動作させるための情報 でまとめた情報が使えそうです。
Linux 版の場合、-p オプションを使用することで、永続化するディレクトリが指定できるのですが、Windows 版の場合は、SQL Server Express 版と同じで「attach_dbs」が使われていそうな感じでした。
docker inspect の情報を見る限り、Windows 版では、Mount のカテゴリが無くて、attach_dbc の実行時オプションが使用されていそうだったのですよね。
Windows 10 の Docker for Windows を使用して実行することも可能です。
Docker for Windows の場合、MobyLinux を仮想マシンとして実行していますので、Linux 版のイメージを PULL する必要があります。
ホスト OS 側でドライブが共有されていれば、Docker からホスト OS のディレクトリに直接マウントし、データベースをホスト配置することも可能です。
docker run --name sqlvnext -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=M@sterEr0s" -p 11433:1433 -v c:/temp/docker:/var/opt/mssql -d microsoft/mssql-server-linux sqlcmd -S .,11433 -U sa -P "M@sterEr0s" -Q "SELECT @@VERSION"
こちらも MobyLinux 上でコンテナーを動作させていいるため、Ubuntu として表示されていますね。