SQL Serverの開発環境ってインストーラーを走らせて、ライセンスを確認して……と、セットアップが面倒ですよね。しかもいざ構築したら「OSの設定が汚れた」「別PCで再現できない」なんて悩みも出てきます。
そんな面倒を丸ごと解決してくれるのがDockerです。コマンド数行でSQL Serverのコンテナが起動し、不要になったら跡形もなく消せます。
この記事ではDocker初心者の方に向けて、SQL Serverの開発環境をDockerで構築する手順を解説します。
この記事でわかること
- DockerでSQL Serverコンテナを起動する方法(
docker run) - Docker Composeを使った管理しやすい構築方法(おすすめ)
- SQL Serverへの接続方法(
sqlcmd・GUIツール) - データを永続化してコンテナ削除後もDBを守る方法
- macOS(Apple Silicon)での注意点とトラブル対処法
結論:DockerならSQL Serverの開発環境は5分で作れる
本記事で作る開発用SQL Server環境
本記事では以下の環境を構築します。
| 項目 | 内容 |
|---|---|
| SQL Serverバージョン | 2022(Latest) |
| エディション | Developer Edition(無償) |
| 接続ポート | 1433 |
| データ永続化 | Dockerボリューム使用 |
| 推奨構築方法 | Docker Compose |
ローカルの開発・検証用途にちょうどよい最小構成を目指します。
DockerでSQL Serverを構築するメリット
Dockerを使う理由を簡単に整理しておきましょう。
- 環境をすぐ作れる
コマンド数行でSQL Serverが起動します。インストーラーのウィザードをポチポチ進める必要はありません。 - OSを汚さない
SQL ServerはDockerコンテナの中で動くのでホストPC(あなたのMacやWindowsマシン)の環境には一切手を加えません。「レジストリがごちゃごちゃした」「アンインストールしても残骸が残る」といった心配が不要です。 - 削除も簡単
コンテナとイメージを消すだけでSQL Serverごとなかったことにできます。クリーンな状態に戻すのが非常に楽です。
DockerでSQL Serverを動かす前に知っておきたいこと
SQL ServerのDockerイメージについて
Microsoft公式のSQL Server向けDockerイメージはDocker HubおよびMicrosoft Container Registry(MCR)で公開されています。
タグ(バージョン)の指定形式は2022-latest、2019-latestのようになっています。
開発用途なら「Developer Edition」で十分
SQL Serverにはいくつかのエディションがあります。開発・テスト目的であればDeveloper Editionが最適です。
| エディション | 費用 | 用途 |
|---|---|---|
| Developer | 無償 | 開発・テスト用(本番利用不可) |
| Express | 無償 | 小規模本番・学習用(機能制限あり) |
| Standard / Enterprise | 有償 | 本番環境向け |
コンテナ起動時に環境変数MSSQL_PID=Developerを指定することでDeveloper Editionとして動作します。
macOSでの注意点(重要)
Apple Silicon(M1/M2/M3/M4)環境
SQL ServerのDockerイメージはx86_64(AMD64)アーキテクチャ向けに提供されています。Apple SiliconのMacはARMアーキテクチャのためそのままでは動作しません。
Rosettaによるエミュレーション
Docker Desktop for MacにはRosetta(ローゼッタ)エミュレーションの機能があり、これを有効にすることでAMD64向けイメージをApple Siliconで動作可能になります。
設定箇所:Docker Desktop → Settings → General → 「Use Rosetta for x86_64/amd64 emulation on Apple Silicon」をONにする

またdocker-compose.yamlまたはdocker runコマンドにplatform: linux/amd64の指定が必要です(後述)。
パフォーマンスの注意点: Rosettaエミュレーションを使うとネイティブ動作と比べてパフォーマンスが落ちる場合があります。
最小構成でSQL Serverコンテナを起動する(docker run)
SQL Serverコンテナを起動するコマンド
まずはシンプルにdocker runコマンドでSQL Serverを起動してみましょう。
docker run -e "ACCEPT_EULA=Y" \
-e "MSSQL_SA_PASSWORD=【SAパスワード】" \
-e "MSSQL_PID=Developer" \
-p 1433:1433 \
--name sqlserver-dev \
-d mcr.microsoft.com/mssql/server:2022-latestApple Silicon(M1、M2…)のMacを使っている場合は先頭に--platform linux/amd64を追加してください。
docker run --platform linux/amd64 \
-e "ACCEPT_EULA=Y" \
-e "MSSQL_SA_PASSWORD=【SAパスワード】" \
-e "MSSQL_PID=Developer" \
-p 1433:1433 \
--name sqlserver-dev \
-d mcr.microsoft.com/mssql/server:2022-latest各オプションの意味を初心者向けに解説
- -p 1433:1433
ホストのポート:コンテナのポートという書き方です。1433はSQL Serverのデフォルトポートです。ホスト側のポートを変えたい場合は左の数字だけ変更します(例:-p 11433:1433)。 - MSSQL_SA_PASSWORD
saはSQL Serverの最高権限管理者アカウントです。パスワードは大文字・小文字・数字・記号を含む8文字以上という複雑さポリシーがありますのでこれを満たす必要があります。 - ACCEPT_EULA=Y
MicrosoftのEnd User License Agreement(使用許諾契約)に同意することを示す指定です。Y を指定しないとコンテナが起動しません。 - –name
コンテナに名前をつけることで後からdocker stop sqlserver-devのように名前で操作できるようになります。省略するとランダムな名前が割り当てられます。
コンテナが起動しているか確認する
起動後は以下のコマンドでコンテナの状態を確認します。
docker psCONTAINER ID IMAGE STATUS PORTS NAMES
xxxxxxxxxxxx mcr.microsoft.com/mssql/server:2022-latest Up 30 seconds 0.0.0.0:1433->1433/tcp sqlserver-devSTATUS列がUpになっていれば起動成功です。
Docker ComposeでSQL Serverを構築する(おすすめ)
docker runコマンドは手軽ですがオプションが増えると管理が大変になります。Docker Composeを使えば設定をファイルで管理でき、チームへの共有も簡単です。実際の開発現場でもこちらがよく使われます。
docker-compose.yaml の最小構成
プロジェクトのルートディレクトリにdocker-compose.yamlを作成し以下の内容を貼り付けてください。
services:
sqlserver:
image: mcr.microsoft.com/mssql/server:2022-latest
platform: linux/amd64 # Apple Siliconの場合は必須、Windowsは削除してもOK
container_name: sqlserver-dev
ports:
- "1433:1433"
environment:
ACCEPT_EULA: "Y"
MSSQL_SA_PASSWORD: "【SAパスワード】"
MSSQL_PID: "Developer"
volumes:
- sqlserver_data:/var/opt/mssql
volumes:
sqlserver_data:各設定項目を初心者向けに解説
- image
使用するDockerイメージを指定します。mcr.microsoft.com/mssql/server:2022-latestでSQL Server 2022の最新版を使用します。 - container_name
コンテナに固定の名前をつけます。docker stop sqlserver-devのように名前で操作できます。 - ports
"ホストポート:コンテナポート"の形式で指定します。"1433:1433"でホストPCの1433番ポートをコンテナに繋ぎます。 - environment
コンテナ内の環境変数を設定します。ACCEPT_EULA、MSSQL_SA_PASSWORD、MSSQL_PIDはSQL Server起動に必須の3つです。 - volumes
データをホストPC側に保存するための設定です。コンテナを削除してもデータが消えなくなります(詳細は後述)。
Docker ComposeでSQL Serverを起動する
docker-compose.yamlがあるディレクトリで以下のコマンドを実行します。
docker compose up -d-dはバックグラウンド起動のオプションです。これがないとターミナルを閉じるとコンテナも止まってしまいます。
起動確認はdocker psで行えます。
SQL Serverに接続する方法
コンテナ内から接続する(sqlcmd)
コンテナの中に入ってsqlcmdコマンドで接続する方法です。GUIツールがなくても動作確認できるので覚えておくと便利です。
コマンド – コンテナに入る
docker exec -it sqlserver-dev bashdocker exec -it sqlserver-dev bash
コマンド – sqlcmdで接続
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "【SAパスワード】" -No接続後に1>というプロンプトが表示されれば成功です。SQL文を入力して GO と打つと実行されます。
SELECT @@VERSION
GOexitと入力するとコンテナから抜けられます。
接続情報まとめ
| 項目 | 値 |
|---|---|
| ホスト | localhost(または 127.0.0.1) |
| ポート | 1433 |
| ユーザー | sa |
| パスワード | 設定した【SAパスワード】 |
| 認証方式 | SQL Server認証 |
GUIツールはSQL補完や視覚的なER図表示ができて便利です。A5:SQL Mk-2やDBeaverは無料で使えるのでおすすめです。
データを永続化する(コンテナ削除でDBが消えないようにする)
volumesを使ったデータ永続化
Dockerコンテナはデフォルトでは使い捨てです。コンテナを削除するとその中のデータ(作成したDBやテーブル)も一緒に消えてしまいます。
これを防ぐのがDockerボリュームです。先ほどのdocker-compose.yamlに含めたvolumesの設定がこれにあたります。
volumes:
- sqlserver_data:/var/opt/mssql/var/opt/mssql はSQL Serverがデータファイルを保存するコンテナ内のパスです。これをDockerが管理するボリューム(sqlserver_data)に紐付けることでコンテナが消えてもデータは残り続けます。
ボリュームの一覧は以下で確認できます。
docker volume ls永続化しない場合に起きる問題
volumesの設定をせずにコンテナを削除すると作成したデータベース・テーブル・データがすべて消えます。
「昨日まで入れていたテストデータが消えた!」という悲劇を避けるためにも開発環境であってもvolumesの設定は最初から入れておくことをおすすめします。
開発用SQL Serverコンテナの基本操作
コンテナの停止
コンテナを停止しますが削除はしません。次回docker compose startで再起動できます。
docker compose stopコンテナの再起動
コンテナを再起動します。設定変更後などに使います。
docker compose restartコンテナの削除
docker compose downコンテナを停止して削除します。ボリュームは残りますのでデータは消えません。
ボリュームごと削除
ボリュームごと完全に削除したい場合は-vオプションをつけます。
docker compose down -vよくあるトラブルと解決方法
SQL Serverが起動しない
まずdocker logsでコンテナのログを確認します。
docker logs sqlserver-devエラーメッセージから原因を特定できることが多いです。よくある原因は以下の2つです。
- パスワードがポリシーを満たしていない(次項参照)
- ポート1433がすでに別プロセスに使われている →
portsの左側の数字を変更する(例:11433:1433)
SAパスワードのポリシーエラー
docker logsに以下のようなメッセージが出ている場合はパスワードが複雑さポリシーを満たしていません。
ERROR: Unable to set system administrator password
SQL Serverのパスワードポリシーは以下の条件をすべて満たす必要があります。
- 8文字以上
- 大文字(A-Z)を含む
- 小文字(a-z)を含む
- 数字(0-9)を含む
- 記号(!@#$ 等)を含む
YourStrong!Passw0rdはこれを満たすサンプルとして公式でも紹介されています。参考にしてください。なのでいろんなトコロで使われているかも……
macOS(Apple Silicon)で起動できない場合
以下の点を確認してください。
- Docker Desktop の Rosetta エミュレーション設定がONになっているか
docker-compose.yamlにplatform: linux/amd64の指定があるか- それでも起動しない場合は Docker Desktop を最新版にアップデートしてみる
Q&A
まとめ:Dockerを使えばSQL Serverの開発環境は一瞬で作れる
- DockerならSQL Serverをコマンド数行で起動できて環境構築は数分で終わるよ。
docker runでもいいけど設定をファイルで管理できる Docker Compose が断然おすすめだよ。volumesの設定を入れておけばコンテナを削除してもデータは消えないよ。- macOS(Apple Silicon)では
platform: linux/amd64と Rosetta設定が必須だよ。 - パスワードをそのままGitにコミットするのは避けて
.envファイルに切り出してねEね。




