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でPostgreSQL環境構築【docker-compose対応】でPostgreSQLの構築もやっています、Docker Composeの書き方を比較しながら読むと理解が深まります。
DockerでSQL Serverを動かす前に知っておきたいこと
SQL ServerのDockerイメージについて
Microsoft公式のSQL Server向けDockerイメージは Docker Hub および Microsoft Container Registry(MCR) で公開されています。
mcr.microsoft.com/mssql/server
タグ(バージョン)の指定形式は 2022-latest、2019-latest のようになっています。本記事では最新の 2022-latest を使用します。
開発用途なら「Developer Edition」で十分
SQL Serverにはいくつかのエディションがあります。開発・テスト目的であれば Developer Edition が最適です。
| エディション | 費用 | 用途 |
|---|---|---|
| Developer | 無償 | 開発・テスト用(本番利用不可) |
| Express | 無償 | 小規模本番・学習用(機能制限あり) |
| Standard / Enterprise | 有償 | 本番環境向け |
Dockerコンテナ起動時に環境変数 MSSQL_PID=Developer を指定することでDeveloper Editionとして動作します。
SQL Server自体の操作やT-SQLを基礎から学びたい方はこちらの書籍が参考になります。
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で動作させられます。デフォルトでONとなっていると思いますが、確認してみてください。
設定箇所: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=YourStrong!Passw0rd" \
-e "MSSQL_PID=Developer" \
-p 1433:1433 \
--name sqlserver-dev \
-d mcr.microsoft.com/mssql/server:2022-latest
Apple Silicon(M1/M2/M3/M4)のMacを使っている場合は、先頭に –platform linux/amd64 を追加してください。
docker run --platform linux/amd64 \
-e "ACCEPT_EULA=Y" \
-e "MSSQL_SA_PASSWORD=YourStrong!Passw0rd" \
-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)。 - SAパスワード(MSSQL_SA_PASSWORD)
sa はSQL Serverの最高権限管理者アカウントです。パスワードは 大文字・小文字・数字・記号を含む8文字以上 という複雑さポリシーがありますのでこれを満たす必要があります。 - ライセンス同意(ACCEPT_EULA=Y)
MicrosoftのEnd User License Agreement(使用許諾契約)に同意することを示す指定です。 - コンテナ名(–name)
コンテナに名前をつけることで、後から docker stop sqlserver-dev のように名前で操作できるようになります。省略するとランダムな名前が割り当てられます。
コンテナが起動しているか確認する
起動後は以下のコマンドでコンテナの状態を確認します。
docker ps
CONTAINER ID IMAGE STATUS PORTS NAMES
xxxxxxxxxxxx mcr.microsoft.com/mssql/server:2022-latest Up 30 seconds 0.0.0.0:1433->1433/tcp sqlserver-dev
STATUS 列が Up になっていれば起動成功です。
Docker ComposeでSQL Serverを構築する(おすすめ)
docker run コマンドは手軽ですがオプションが増えると管理が大変になります。Docker Compose を使えば設定をファイルで管理でき、チームへの共有も簡単です。実際の開発現場でもこちらがよく使われます。
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: "YourStrong!Passw0rd"
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側に保存するための設定です。sqlserver_data:/var/opt/mssql と指定することで、コンテナを削除してもデータが消えなくなります(詳細は後述)。
docker composeでSQL Serverを起動する
docker-compose.yml があるディレクトリで以下のコマンドを実行します。
docker compose up -d
-d はバックグラウンド起動のオプションです。これがないとターミナルを閉じるとコンテナも止まってしまいます。
起動確認も同様に docker ps で行えます。
SQL Serverに接続する方法
コンテナ内から接続する(sqlcmd)
コンテナの中に入って sqlcmd コマンド で接続する方法です。GUIツールがなくても動作確認できるので覚えておくと便利です。
# コンテナに入る
docker exec -it sqlserver-dev bash
# sqlcmdで接続
/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "YourStrong!Passw0rd" -No
接続後、1> というプロンプトが表示されれば成功です。SQL文を入力して GO と打つと実行されます。
SELECT @@VERSION
GO
exit と入力するとコンテナから抜けられます。
接続情報まとめ
| 項目 | 値 |
|---|---|
| ホスト | localhost(または 127.0.0.1) |
| ポート | 1433 |
| ユーザー | sa |
| パスワード | YourStrong!Passw0rd(設定した値) |
| 認証方式 | SQL Server認証 |
GUIツールはSQL補完や視覚的なER図表示ができて便利です。A5:SQL Mk-2やDBeaverは無料で使えるのでおすすめです。
GUIツールではなくWebアプリケーションからDB接続する場合、スキーマ設定をあらかじめ接続URLに含めておくのが便利です。こちらでPostgreSQLでの解説をしています。
データを永続化する(コンテナ削除でDBが消えないようにする)
Dockerのボリュームデータはホストマシンに保存されます。開発データが増えてきたり、複数PC間でDocker環境を持ち運びたい場合は、高速な外付けSSDがあると快適です。

バッファロー BUFFALO USB3.1Gen1 ポータブルSSD 1TB 日本製 PS5/PS4(メーカー動作確認済) 耐衝撃・コネクター保護機構 SSD-PG1.0U3-B/NL
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 stop
コンテナを停止しますが削除はしません。次回 docker compose start で再起動できます。
コンテナの再起動
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
- QDeveloper Editionは本番環境で使える?
- A
使えません。Developer Editionは開発・テスト専用ライセンスです。本番環境ではStandard EditionまたはEnterprise Editionが必要です。
- QSQL Server 2019と2022の違いは?
- A
2022は2019と比べてAzure連携機能の強化や、パフォーマンス改善が含まれています。新規に構築するなら特別な理由がなければ2022(最新版)を選ぶとよいと思います。
- Qポート番号1433は変えられる?
- A
変えられます。ports の左側の数字(ホスト側のポート)を変えるだけです。例えば “11433:1433” にすれば、ホストPCからはポート11433で接続します。接続ツール側のポート番号設定も合わせて変更してください。
- Qdocker-compose.yamlのパスワードをそのまま使っていい?
- A
開発環境であれば問題ないですがGitHubなどに公開するリポジトリにパスワードをそのまま書くのは避けてください。.env ファイルに切り出してGitの管理対象から外す運用がおすすめです。
まとめ:Dockerを使えばSQL Serverの開発環境は一瞬で作れる
本記事のポイントまとめ
- DockerならSQL Serverをコマンド一行で起動できて環境構築は数分で終わるよ。
- docker run でもいいけど、設定をファイルで管理できる Docker Compose が断然おすすめだよ。
- volumes の設定を入れておけば、コンテナを削除してもデータは消えないよ。
- macOS(Apple Silicon)では platform: linux/amd64 と Rosetta設定が必須だよ。




