0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQL Server 2022をDockerコンテナで動かす

Last updated at Posted at 2024-10-11

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種があるようです。

image.png

ドキュメントでは、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 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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?