以下の内容はhttps://www.hanachiru-blog.com/entry/2025/01/27/120000より取得しました。


【SQL Server】Apple SiliconのMacでDockerを用いてSQL Serverを構築・利用する方法

はじめに

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コンテナを動かせるようになります。

Use Rosetta for x86/amd64 emulation on Apple Siliconを有効に

バージョンによって操作に違うかもですが、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と接続します。またuseridpasswordについてですが、ひとまずセットアップ時に作成されるシステム管理者(SAアカウント)を利用します。useridSAで、passwordMSSQL_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



以上の内容はhttps://www.hanachiru-blog.com/entry/2025/01/27/120000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14