後述:OSのバージョンがventuraになった事と、Docker Desktopのバージョンがv4.16以降で動作に仮対応した様です。
Rosetta 2をダウンロードし、Docker Dashboardから「Use Rosetta for x86/amd64 emulation on Apple Silicon」のチェックをオンに変更すれば動作自体は可能です。参考:Microsoft Developer Blogs
ひょんなことから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
注意
GitHub上でのやり取りでも書かれているので引用翻訳しておきます。
Rosettaでx86_64のSQL Serverコンテナを実行することは、理想的な解決策ではないことが確認できました。アーキエミュレーションのため、負荷がかかるとSQL Serverコンテナがロックされ、応答しなくなるのです。M1を使っている開発者は、SQL Serverコンテナを常に再起動しなければならないことを報告しています。使用は可能ですが、バグが多いのです。
引用元:https://github.com/microsoft/mssql-docker/issues/734#issuecomment-1385603928
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での運用は不可能と判断せざるをえませんでした。
全体的にMS系は情報が少なく、かつ国内のサイトだと軽度の内容でも出来ることになってしまう記事が乱立しているので注意して下さい。