本記事にはアフィリエイトリンクを含みます。Amazonのアソシエイトとして収益を得る場合があります。

DockerでSQL Server開発環境を5分で構築する方法【初心者向け】

Dockerのアイキャッチ インフラ・環境構築
インフラ・環境構築

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 を使用します。

参考: Microsoft公式 Docker Hub(SQL Server)

開発用途なら「Developer Edition」で十分

SQL Serverにはいくつかのエディションがあります。開発・テスト目的であれば Developer Edition が最適です。

エディション費用用途
Developer無償開発・テスト用(本番利用不可)
Express無償小規模本番・学習用(機能制限あり)
Standard / Enterprise有償本番環境向け

Dockerコンテナ起動時に環境変数 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で動作させられます。デフォルトで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を起動してみましょう。

bash

Apple Silicon(M1/M2/M3/M4)のMacを使っている場合は、先頭に –platform linux/amd64 を追加してください。

bash

各オプションの意味を初心者向けに解説

  • ポート(-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 のように名前で操作できるようになります。省略するとランダムな名前が割り当てられます。

コンテナが起動しているか確認する

起動後は以下のコマンドでコンテナの状態を確認します。

bash
bash – 実行結果

STATUS 列が Up になっていれば起動成功です。

Docker ComposeでSQL Serverを構築する(おすすめ)

docker run コマンドは手軽ですがオプションが増えると管理が大変になります。Docker Compose を使えば設定をファイルで管理でき、チームへの共有も簡単です。実際の開発現場でもこちらがよく使われます。

Docker Composeをもっと深く理解したい方には、体系的に学べる書籍もおすすめです。


Docker実践ガイド 第3版 impress top gearシリーズ

docker-compose.yaml の最小構成

プロジェクトのルートディレクトリに docker-compose.yaml を作成し、以下の内容を貼り付けてください。

yaml

各設定項目を初心者向けに解説

  • 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 があるディレクトリで以下のコマンドを実行します。

bash

-d はバックグラウンド起動のオプションです。これがないとターミナルを閉じるとコンテナも止まってしまいます。

起動確認も同様に docker ps で行えます。

SQL Serverに接続する方法

コンテナ内から接続する(sqlcmd)

コンテナの中に入って sqlcmd コマンド で接続する方法です。GUIツールがなくても動作確認できるので覚えておくと便利です。

bash
bash

接続後、1> というプロンプトが表示されれば成功です。SQL文を入力して GO と打つと実行されます。

sql

exit と入力するとコンテナから抜けられます。

接続情報まとめ

項目
ホストlocalhost(または 127.0.0.1)
ポート1433
ユーザーsa
パスワードYourStrong!Passw0rd(設定した値)
認証方式SQL Server認証

GUIツールはSQL補完や視覚的なER図表示ができて便利です。A5:SQL Mk-2DBeaverは無料で使えるのでおすすめです。

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 の設定がこれにあたります。

yaml

/var/opt/mssql はSQL Serverがデータファイルを保存するコンテナ内のパスです。これをDockerが管理するボリューム(sqlserver_data)に紐付けることで、コンテナが消えてもデータは残り続けます。

ボリュームの一覧は以下で確認できます。

bash

永続化しない場合に起きる問題

volumes の設定をせずにコンテナを削除すると作成したデータベース・テーブル・データがすべて消えます。

「昨日まで入れていたテストデータが消えた!」という悲劇を避けるためにも、開発環境であっても volumes の設定は最初から入れておくことをおすすめします

開発用SQL Serverコンテナの基本操作

コンテナの停止

bash

コンテナを停止しますが削除はしません。次回 docker compose start で再起動できます。

コンテナの再起動

bash

コンテナを再起動します。設定変更後などに使います。

コンテナの削除

bash

コンテナを停止して削除します。ボリュームは残りますのでデータは消えません。

ボリュームごと完全に削除したい場合は -v オプションをつけます。

bash

よくあるトラブルと解決方法

SQL Serverが起動しない

確認ポイント

まず docker logs でコンテナのログを確認します。

bash

エラーメッセージから原因を特定できることが多いです。よくある原因は下記の2つです。

  • パスワードがポリシーを満たしていない(次項参照)
  • ポート1433がすでに別プロセスに使われている → ports の左側の数字を変更する(例:11433:1433)

SAパスワードのポリシーエラー

docker logs に以下のようなメッセージが出ている場合はパスワードが複雑さポリシーを満たしていません。

log

SQL Serverのパスワードポリシーは以下の条件を同時に満たす必要があります。

  • 8文字以上
  • 大文字(A-Z)を含む
  • 小文字(a-z)を含む
  • 数字(0-9)を含む
  • 記号(!@#$ 等)を含む

YourStrong!Passw0rd はこれを満たすサンプルとして公式でも紹介されています。参考にしてください。なのでいろんなところで使われているかも・・・

macOS(Apple Silicon)で起動できない場合

以下の点を確認してください。

  1. Docker Desktop の Rosetta エミュレーション設定がONになっているか。
  2. docker-compose.yamlplatform: linux/amd64 の指定があるか。
  3. それでも起動しない場合は Docker Desktop を最新版にアップデートしてみる。

Q&A

Q
Developer Editionは本番環境で使える?
A

使えません。Developer Editionは開発・テスト専用ライセンスです。本番環境ではStandard EditionまたはEnterprise Editionが必要です。

Q
SQL Server 2019と2022の違いは?
A

2022は2019と比べてAzure連携機能の強化や、パフォーマンス改善が含まれています。新規に構築するなら特別な理由がなければ2022(最新版)を選ぶとよいと思います。

Q
ポート番号1433は変えられる?
A

変えられます。ports の左側の数字(ホスト側のポート)を変えるだけです。例えば “11433:1433” にすれば、ホストPCからはポート11433で接続します。接続ツール側のポート番号設定も合わせて変更してください。

Q
docker-compose.yamlのパスワードをそのまま使っていい?
A

開発環境であれば問題ないですがGitHubなどに公開するリポジトリにパスワードをそのまま書くのは避けてください。.env ファイルに切り出してGitの管理対象から外す運用がおすすめです。

まとめ:Dockerを使えばSQL Serverの開発環境は一瞬で作れる

本記事のポイントまとめ

  • DockerならSQL Serverをコマンド一行で起動できて環境構築は数分で終わるよ。
  • docker run でもいいけど、設定をファイルで管理できる Docker Compose が断然おすすめだよ。
  • volumes の設定を入れておけば、コンテナを削除してもデータは消えないよ。
  • macOS(Apple Silicon)では platform: linux/amd64 と Rosetta設定が必須だよ。
当ブログの内容はできる限り正確な情報を提供するよう努めていますが、利用にあたっては自己責任でお願いいたします。
掲載内容に基づく操作・設定などによって生じたトラブルや損害について、当サイトは一切の責任を負いません。
タイトルとURLをコピーしました