はじめに
MacでSQL Serverを利用するには、どうやらDockerを利用した手法でやるのがよいっぽいです。以下のダウンロードページにはWindows用しかありませんでした。
www.microsoft.com
というわけで今回はSQL Server 2022 Linuxコンテナイメージをプルしてきて実行する方法を紹介したいと思います。
mcr.microsoft.com
手順
Apple Siliconの場合
SQL ServerコンテナがARMで動かないようなので、代わりにAzure SQL Edgeが利用されたりします。
https://hub.docker.com/_/microsoft-azure-sql-edge
それ以外の手法としてはUse Rosetta for x86/amd64 emulation on Apple SiliconをDocker Desktopで有効にすればSQL Serverコンテナを動かせるようになります。

バージョンによって操作に違うかもですが、Settings > Features in development > Use Rosetta for x86/amd64 emulation on Apple Siliconから有効にできます。
コンテナをプルして立ち上げる
まずはMicrosoft Container Registryからイメージをpullします。
$ docker pull mcr.microsoft.com/mssql/server:2022-latest
またdocker imagesで正しくpullできたか確認することができます。
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mcr.microsoft.com/mssql/server 2022-latest b823451808db 8 days ago 1.62GB
下記コマンドを実行して、イメージを実行します。またMSSQL_SA_PASSWORDにはパスワードを設定してください。SQL Serverのデフォルトのパスワードポリシーは8文字以上、大文字・小文字・10進数の数字・記号の内3種類を含んでいる必要があります。
$ docker run -e "ACCEPT_EULA=Y" \ -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" \ -p 1433:1433 --name sql1 --hostname sql1 \ -d mcr.microsoft.com/mssql/server:2022-latest
それぞれのパラメーターの意味は公式ドキュメントを参照してください。
docker run — Docker-docs-ja 24.0 ドキュメント
Docker:SQL Server on Linux 用のコンテナーのインストール - SQL Server | Microsoft Learn
正しく動作していると、docker psで動作しているコンテナを調べることができます。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 24d947fa6db9 mcr.microsoft.com/mssql/server:2022-latest "/opt/mssql/bin/perm…" 55 seconds ago Up 54 seconds 0.0.0.0:1433->1433/tcp sql1
実験
SQL Serverへ接続
実際に立ち上げたSQL Serverへ接続してみます。docker exec -itコマンドを利用します。
docker container exec — Docker-docs-ja 24.0 ドキュメント
# docker exec -it <containerのNAMES(--nameで指定した値)> コマンド $ docker exec -it sql1 "bash"
上記コマンドを実行すると、コンテナ内でコマンドを実行できるようになります。
$ mssql@sql1:/$ pwd / $ mssql@sql1:/$ ls bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
SQL Serverと接続します。またuseridとpasswordについてですが、ひとまずセットアップ時に作成されるシステム管理者(SAアカウント)を利用します。useridはSAで、passwordはMSSQL_SA_PASSWORDで指定した値です。
# /opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<YourNewStrong@Passw0rd>" $ /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P hogehoge # 接続がうまくできない場合は-Noオプションを追加して、暗号化をオプションに指定する $ /opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P hogehoge -No
パスワードの変更やアカウントの無効化の仕方は下を参照してください。
Docker:SQL Server on Linux 用のコンテナーのインストール - SQL Server | Microsoft Learn
クエリを実行する
例えばすべてのデータベースの名前を返すクエリを実行してみます。GOを入力しないと実行されないことに注意してください。
1> SELECT Name from sys.databases; 2> GO Name -------------------------------------------------------------------------------------------------------------------------------- master tempdb model msdb
データベースを作成して、テーブルを作成、データを挿入してみます。
1> CREATE DATABASE TestDB; 2> USE TestDB; 3> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT); 4> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154); 5> GO
1> SELECT * FROM Inventory WHERE quantity > 152; 2> GO id name quantity ----------- -------------------------------------------------- ----------- 2 orange 154
sqlcmdのセッションを終了するにはQUITと入力すればOKです。
1> QUIT
お片付け
最後にはSQL Serverのコンテナを削除しておきましょう。またデータはすべて削除されるのでご注意ください。
$ docker stop sql1
$ docker rm sql1