さて、SQL Server on Linuxがpublic releaseになりましたので
早速、RHELやOpenShiftで動かしてみたいと思います。といっても、RHELで動かすのは手順通りやるとあっという間に動いてしまいます。
ちなみに、rootでリダイレクトするためだけにsudo su
しているところは次のようにやるとsudo1回ですむはずです。
$ sudo sh -c "curl https://packages.microsoft.com/config/rhel/7/mssql-server.repo > /etc/yum.repos.d/mssql-server.repo"
さて接続テストですが、sqlcmd
は別パッケージなのでサーバーで接続する場合もパッケージを追加します。
sqlcmdを使うのもいいですが、せっかくなのでVisual Studio Code拡張を使ってみましょう。拡張をインストールします。
そのあと、ファイルを新規作成して、Language Mode
をSQLにします。その後、Ctrl+Shift+C
を押すと接続先とユーザー/パスワードなどを聞かれるので全部正しく入力するとそのサーバーに接続します。Ctrl+Shift+P
を押して、MSSQL:Connect
と入力しても同じことになります*1。あとは適当なSQLを入力して、Ctrl+Shift+E
もしくはCtrl+Shit+P
からのMSSQL:Execute
で実行します。
さて、次にOpenShiftで実行してみましょう。SQL Server on LinuxのコンテナがDocker Hubに置いてあるので普通のコンテナと同じように実行すればよいのですが、いくつか注意点があります。現在のSQL Server のコンテナはrooユーザーでプロセスを実行する必要がありますが、これはOpenShift上で動かすコンテナとしてはデフォルトの設定では許可されていません。
とりあえずテスト目的ということで許可しましょう。
$ oadm policy add-scc-to-user anyuid -z default
また、Dockerとして動かす場合のドキュメントにある通り、ACCEPT_EULA
とSA_PASSWORD
環境変数を指定しないと動きません。
Run the SQL Server Docker image on Linux, Mac, or Windows - SQL Server vNext CTP1 | Microsoft Docs
次のように指定します。
$ oc env dc/<deploymentconfigの名前> ACCEPT_EULA=Y SA_PASSWORD=<password>
これで動けばよいのですが、パスワードが簡単すぎた場合など、起動に失敗するケースがあります。OpenShiftだと起動に失敗した場合、コンテナのログしか確認できません。
$ oc logs <podの名前> Configuring Microsoft(R) SQL Server(R)... Microsoft(R) SQL Server(R) setup failed with error code 1. Please check the setup log in /var/opt/mssql/log for more information.
という感じに詳細は/var/opt/mssql/log を見ろとありますが、起動に失敗したPodはすぐにterminateされるのでこのファイルを見れません。このような場合は debugコマンドを使いましょう。debugコマンドにより所定の起動コマンドが実行される前の状態でコンテナに入れるので、表示された起動コマンドを実行してログを確認します。ちなみに/var/opt/mssql/logはディレクトリで、しかもこのshellは補完がきかないので先にlsでファイルを確認しています。
$ oc debug <terminateされたpodの名前> Debugging with pod/mssql-server-n-xxxxx-debug, original command: /bin/sh -c /opt/mssql/bin/sqlservr.sh Waiting for pod to start ... Pod IP: 10.1.0.n If you don't see a command prompt, try pressing enter. # /bin/sh -c /opt/mssql/bin/sqlservr.sh Configuring Microsoft(R) SQL Server(R)... Microsoft(R) SQL Server(R) setup failed with error code 1. Please check the setup log in /var/opt/mssql/log for more information. # ls /var/opt/mssql/log HkEngineEventFile_0_131240215600920000.xel errorlog errorlog.1 log.trc setup-20161119-093236.log system_health_0_131240215607860000.xel # cat /var/opt/mssql/log/errorlog <snip> 2016-11-19 09:32:41.37 spid17s Password validation failed. The password does not meet SQL Server password policy requirements because it is too short. The password must be at least 8 characters.
こんな感じでエラーメッセージが確認できます。最後の方はOpenShiftのコマンド紹介になってしまいましたが、他のコンテナプラットフォームで同じような制約がある場合にも使えるかと思います。
*1:mssql:connectは全部入力しなくても適宜補完されます