Apple silicon搭載のMacでSQL Serverを動かす

現在Apple siliconに対応したSQL Serverは現状ありませんが、Docker Desktop Version がRosettaをサポートしたことで、SQL Server Linuxを動作させることができるようになりました。
SQL Server Linuxを動かしてみたので、その際の手順になります。
Dockerを使ったSQL Server Linuxについては、Microsoftのページにも記載があるため、こちらを参考にしました。
learn.microsoft.com

今回はコンテナ起動時のパラメータを毎回入力しないようにするために、docker-composeを使用しました。

環境

  • Apple M1 Pro macOS Ventura
  • Docker Desktop Version 4.16.2

手順

1. Docker DesktopでRosettaを有効にする

Docker DesktopのSettingで「Use Rosetta for x86/amd64 emulation on Apple Silicon」にチェックを付け有効にします。

2. docker-compose.ymlを作成

docker-compose.ymlを下記内容で作成します。

version: '3'

services:
  db:
    image: mcr.microsoft.com/mssql/server:2022-latest
    platform: 'linux/x86_64'
    ports:
      - '1433:1433'
    volumes:
      - './data:/var/opt/mssql/data'
      - './log:/var/opt/mssql/log'
      - './secrets:/var/opt/mssql/secrets'
    environment:
      - 'ACCEPT_EULA=Y'
      - 'MSSQL_SA_PASSWORD=${MSSQL_SA_PASSWORD}'
  • 公開されているDockerイメージはx86_x64なため、platformを指定しています。
  • コンテナを削除時にデータが消えないよう、volumesで保存先にホストのフォルダを指定しています。
  • ${MSSQL_SA_PASSWORD}はSQL Server の既定のパスワード ポリシーに従ったパスワードに置き換えてください。
3. コンテナを起動

docker-composeコマンドで起動します。

$ docker-compose up -d


コンテナが起動しているかどうか確認します。

$ docker-compose ps -a


出力結果のSTATUSがUpとなっていれば起動しています。

NAME                IMAGE                                        COMMAND                  SERVICE             CREATED             STATUS              PORTS
mssql-db-1          mcr.microsoft.com/mssql/server:2022-latest   "/opt/mssql/bin/perm…"   db                  11 seconds ago      Up 9 seconds        0.0.0.0:1433->1433/tcp
4. 動作確認

コンテナへ接続後のデータベースの作成からデータの登録まではMicrosoftのサイトに記載の「データの作成とクエリ」のとおりのため、記載を省略します。

コンテナへ接続

$ docker-compose exec db bash


sqlcmdでSQL Serverへ接続

$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P <パスワード>


データベースの作成からデータの登録までは、下記ページのとおりに実行します。
learn.microsoft.com

コンテナ外からの接続は、VS Codeの「SQL Server (mssql)
」を使用しました。
marketplace.visualstudio.com

コンテナ上で登録したデータが参照できました。

まとめ

まだプレビュー版ですが、Docker DesktopのRosettaを使用することでSQL Serverを使用することができました。
Apple siliconのMac上で開発する際に、SQL Serverも含めてローカル内で開発を完結させられるようになったのは良いのではと思います。