docker sqlserver is fuck

Docker SQLServer

M1 MacBookでSQL Server(docker)を動作させるのは相性が良くない

後述:OSのバージョンがventuraになったことで動作に正式対応した様です。

ひょんなことからSQL Serverの検証をしなければいけなくなり、dockerで動くか確認していたのですが、どうやらM1チップ内蔵のMacBookと相性が良くなさそうなのでメモを残しておきます。

「M1 MacBook SQL Serverを動かす」みたいな検索ワードでファストビューに出てくる日本語のサイトが、軒並みHello worldレベルの動作想定なので、業務運用だとミスリード記事になってしまいます。GUIツールであるAzure Data StudioもManagement Studioに比べて著しく機能が無いため併せて注意が必要です。

海外サイトで検索するとこういった記事は出てません。むしろGithubなどで、Microsoftはちゃんとサポートして!という内容のコメントが投稿されています。

https://github.com/microsoft/mssql-docker/issues/734

後述:この記事を書いた数日後に上記のissuesでlimaを使用した方法が紹介されています。

仮想環境の上のコンテナを作成するのであればMacを使う意味がないので本末転倒な気がしますが、苦肉の策でも動かしたい場合はこれしか無さそうです。

ただし仮想環境を多重に動かしている状態なので動作は想像しているより重くなり、かつPCに相応の負担をかけるため個人的にはおすすめしません。

https://github.com/microsoft/mssql-docker/issues/734#issuecomment-1333696500

docker SQL Server利用について

一般的にdockerでSQL Serverを利用する場合下記を利用することになると思います。

image: mcr.microsoft.com/mssql/server:YYYY-latest

上記のimageはM1(arm64)では起動すらしないため下記が推奨されますが、azure-sql-edgeは既存imageの代替え品ではありません。コマンドラインツールであるsqlcmdすら存在しないのは、何を想定して作成しているのか不明でした。

sqlcmdについては上記のGithubのコメントに記載されている通り、別imageを作成してそれをバインドしサーバーの指定をhost.docker.internalにする事で対応できます。

image: mcr.microsoft.com/azure-sql-edge

厄介なのは、azure-sql-edgeがサポートしていない機能があまりにも多過ぎるという事です。サイトが巧妙ですが、サポートされる機能のページ内にサポートされていない機能がふんだんに記載されています(笑)。

DB設計周りの動的管理ビューやDBエンジンのCLRに依存する機能などは、業務システムだと無意識に使っているのではないでしょうか。自分はこの辺を使っているシステムを見ていたので、azure-sql-edgeでの運用は不可能と判断せざるをえませんでした。

Azure SQL Edge でサポートされる機能

全体的にMS系は情報が少なく、かつ国内のサイトだと軽度の内容でも出来ることになってしまう記事が乱立しているので注意して下さい。

  • この記事を書いた人

朝倉卍丸

シングルモルトスコッチなどのお土産を持ってきた人を助けるのが好きです。まあ、昔ながらの方法でやりたいこともありますよね。

-Docker, SQLServer