WindowsのPCで使用する機会があった『Microsoft SQL Server』。
MacBook(macOS)でも使いたいと思い、調べてみるとDockerでコンテナ化できるとのこと。
ただ、結論から言うとM2搭載のMacBookだと正常に起動ができなかった。
随時更新はいたしますが、執筆時の情報となるため、最新情報と異なる可能性がある点はご了承ください。
環境の概要は以下。
環境 | バージョン等 |
---|---|
macOS | M2/12.5.1 |
Docker | 20.10.17/メモリ8GB |
この記事では、実際にコンテナ化するまでの手順や起動できなかった状況等を紹介している。
また、対処方法としては『Azure SQL Edge』を代替として使うことだ。
こちらに関しては、別途記事を作成しているので、合わせてご覧いただきたい。
-
【M2】Azure SQL Edge(SQL Server)のdockerコンテナ起動方法!
Microsoftが提供しているSQL ServerをmacOSの環境で使用する方法を解説する。 M1/M2が搭載されている場合、 『Microsoft SQL Server』をコンテナ化して正常に起 ...
続きを見る
SQL Server コンテナ化
Docker
macOSでDockerを使用できる環境を用意する必要がある。
Docker Desktopをインストールするだけで済むので、未対応の場合は以下の手順も合わせてご覧いただきたい。
-
【M2・Apple Chip対応】macOSのDocker Desktopのインストール方法
開発には欠かせないDockerは、多数のコンテナを管理してサービスを実行することができる。 仮想マシンと比較して、導入コストが低く、軽量で動作が軽いため支持されている。 そこで、本記事では『Docke ...
続きを見る
要件
コンテナの動作には以下の要件が求められる。
要件
- Docker Engine 1.8+
- 2GB以上の十分なメモリを割り当てる
- 各環境変数の定義
- セキュリティの強度が高いパスワード設定
詳細は docker hub を合わせて参照していただきたい。
docker-compose.yml
今回はdocker-compose.yml
を使用してコンテナを定義・起動する。
使用したイメージは2022-latest
(と2019-latest
も原因の切り分けで使用した)。
docker-compose.yml
の内容は以下。順に解説していく。
version: '3'
services:
mssql:
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
- MSSQL_SA_PASSWORD=P@ssw0rd
- ACCEPT_EULA=Y
# デフォルトがDeveloperのため必要に応じて変更する
# - MSSQL_PID=Developer
ports:
- 1433:1433
サービス名はmssql
とし、イメージは使用するバージョンのものを指定する。
各環境変数が必要なため、定義している。
MSSQL_SA_PASSWORD
にて、パスワードを設定する。ACCEPT_EULA
は、ライセンスのへ同意を確認するためのもの。MSSQL_PID
はライセンスを指定できる。デフォルトではDeveloper
のため必要に応じて変更する。
ポートはデフォルトの1433
を指定した。
起動確認
docker-compose.yml
を定義後、以下のコマンドで起動。
イメージのpullが開始され、以下のような出力があり正常に起動できたかのように見受けられた。
% docker-compose up -d
Creating network "docker_default" with the default driver
Pulling mssql (mcr.microsoft.com/mssql/server:2022-latest)...
2022-latest: Pulling from mssql/server
xxxxxxxxxxxx: Pull complete
xxxxxxxxxxxx: Pull complete
xxxxxxxxxxxx: Pull complete
xxxxxxxxxxxx: Pull complete
xxxxxxxxxxxx: Pull complete
Digest: xxxxxxxxxxxx
Status: Downloaded newer image for mcr.microsoft.com/mssql/server:2022-latest
Creating docker_mssql_1 ... done
以下のコマンドでコンテナを確認したが、残念ながら正常に起動ができていない。
% docker-compose ps
Name Command State Ports
----------------------------------------------------------------
docker_mssql_1 /opt/mssql/bin/permissions ... Exit 1
以下のコマンドでログを確認する。
% docker-compose logs mssql
Attaching to docker_mssql_1
mssql_1 | SQL Server 2019 will run as non-root by default.
mssql_1 | This container is running as user mssql.
mssql_1 | To learn more visit https://go.microsoft.com/fwlink/?linkid=2099216.
mssql_1 | /opt/mssql/bin/sqlservr: Invalid mapping of address xxxxxxxxxxxx in reserved address space below xxxxxxxxxxxx. Possible causes:
mssql_1 | 1) the process (itself, or via a wrapper) starts-up its own running environment sets the stack size limit to unlimited via syscall setrlimit(2);
mssql_1 | 2) the process (itself, or via a wrapper) adjusts its own execution domain and flag the system its legacy personality via syscall personality(2);
mssql_1 | 3) sysadmin deliberately sets the system to run on legacy VA layout mode by adjusting a sysctl knob vm.legacy_va_layout.
ログの5行目(上記で言うと6行目)で怒られているのがぱっと見てわかるだろう。
原因調査
原因の切り分けとして、
- バージョンを
2019-latest
に変更 docker run
による起動MSSQL_PID
の定義を変更platform
の定義を追加
等々、試してみたが改善はされなかった。
先程のログをコピーして調べてみると、同じような事象で起動できない例を多々見つけた。
M1/M2では正常に起動しない、対応していないとのことだったので、Microsoft SQL Server をコンテナとして起動することは諦めた。
対処法
Microsoft SQL Server のイメージでは起動ができなかったが、『Azure SQL Edge』のイメージを使用するとM1/M2でも起動することが可能だ。
実際にM2のMacBookで試してみたところ問題なく起動、動作することを確認できた。
詳細についは、こちらをご覧いただきたい。
-
【M2】Azure SQL Edge(SQL Server)のdockerコンテナ起動方法!
Microsoftが提供しているSQL ServerをmacOSの環境で使用する方法を解説する。 M1/M2が搭載されている場合、 『Microsoft SQL Server』をコンテナ化して正常に起 ...
続きを見る
まとめ
以上、M2のMacBook環境でMicrosoft SQL Server のDockerコンテナ化を試した内容を紹介した。
結局のところは正常に起動せず、別のイメージを使用する結果となった。
Appleシリコン(Apple Chip)による恩恵は多々あるが、
ツールやソフトウェアが対応していない、Intelなら可能みたいなこともよくあるのが残念だ。
この記事が少しでも参考になると幸いだ。
他にもDockerやPythonなどプログラミングに関する記事を投稿しているので、合わせてご覧いただきたい。
最後まで目を通していただき、ありがとうございました。