What's?
SQL ServerはLinux上で動作し、またDockerイメージも提供されているようなのでちょっと試してみようかなということで。
SQL Server on Linux
SQL Server 2017から、Linuxで動作するようになったようです。
SQL Server 2017 (14.x) から、SQL Server は Linux で動作するようになりました。 これは同じ SQL Server データベース エンジンであり、オペレーティング システムに関係なく、多くの似た機能とサービスを備えています。
現在のバージョンである、SQL Server 2022でサポートされているOSは以下の3種類のようです。
- Red Hat Enterprise Linux 8.x Server、または 9.x Server
- SUSE Linux Enterprise Server v15 (SP1 - SP4)
- Ubuntu 20.04、または 22.04
SQL Server on Linux のインストール ガイド / サポートされているプラットフォーム
RHEL、SUSE、Ubuntuへのインストール手順。
これに加えて、Dockerイメージが利用できます。
FAQ。
SQL Server on Linuxではサポートされていない機能もあるようです。
Linux 上の SQL Server 2022 (16.x) のエディションとサポートされる機能 / サポートされていない機能とサービス
Microsoft Container Registry上のSQL Serverイメージ
SQL ServerのDockerイメージを使う場合は、Microsoft Container Registryから取得するようです。
ベースイメージがRHELのもの、Ubuntu Linuxのものの2種があるようです。
ドキュメントでは、Ubuntu Linuxのものが使われていますね。
タグについて
SQL Serverのバージョニングに馴染みがないのですが、タグを見るとCUやGDRといった表現があります。
latest
タグを見ると、CUとGDRが含まれているものを指しているようですね。
こちらを見ると、CUは累積的な更新プログラム、GDRは一般配布リリースのようです。
そしてRTMという用語はRelease to Manufacturing(製造へのリリース)で、Service Packや修正プログラムが適用されていないバージョンのことを指すようです。
というわけで、無難に選ぶならCUとGDRの両方を含んだものの方がよいのでしょう。
たとえばこちらですね。
mcr.microsoft.com/mssql/server:2022-CU15-GDR1-ubuntu-22.04
使ってみる
というわけで、あとは使ってみます。
今回の環境はこちら。
$ docker version
Client: Docker Engine - Community
Version: 27.3.1
API version: 1.47
Go version: go1.22.7
Git commit: ce12230
Built: Fri Sep 20 11:42:48 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 27.3.1
API version: 1.47 (minimum version 1.24)
Go version: go1.22.7
Git commit: 41ca978
Built: Fri Sep 20 11:41:09 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.22
GitCommit: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c
runc:
Version: 1.1.14
GitCommit: v1.1.14-0-g2c9f560
docker-init:
Version: 0.19.0
GitCommit: de40ad0
起動。
$ docker container run -it --rm --name sql-server \
-e ACCEPT_EULA=Y \
-e 'MSSQL_SA_PASSWORD=P@ssw0rd' \
mcr.microsoft.com/mssql/server:2022-CU15-GDR1-ubuntu-22.04
設定はこちらを参照。
- クイック スタート:Docker を使用して SQL Server Linux コンテナー イメージを実行する / コンテナーを実行する
- Microsoft SQL Server - Ubuntu based images / Configuration
別のターミナルから接続してみます。
コンテナの中に入ります。
$ docker container exec -it sql-server bash
sqlcmd
でログインを試みます。sa
はデフォルトのシステム管理者アカウントのようです。
$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa
Password:
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.
こちらにこんなことが書かれていました。自己署名証明書なので、SSL接続ができないようですね。
sqlcmd の新しいバージョンは、既定でセキュリティで保護されています。 接続の暗号化の詳細については、Windows 用「sqlcmd ユーティリティ 」および Linux および macOS 用「sqlcmdを使用した接続」をご覧ください。 接続が成功しない場合は、-No オプションを sqlcmd に追加して、暗号化が必須ではなくオプションであることを指定できます。
クイック スタート:Docker を使用して SQL Server Linux コンテナー イメージを実行する / システム管理者のパスワードを変更する
今回は-No
オプションをつけて接続してみます。
$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -No
Password:
1>
今度は成功しました。
確認。
1> create database test;
2> go
1> use test;
2> go
Changed database context to 'test'.
1> create table pokemon(id int, name nvarchar(50), primary key(id));
2> go
1> insert into pokemon(id, name) values(1, 'pikachu');
2> go
(1 rows affected)
1> select * from pokemon;
2> go
id name
----------- --------------------------------------------------
1 pikachu
(1 rows affected)
今回はこんなところで。
1> exit