学習の一環として、自身の環境にデータベースを構築する機会があったので、記事にまとめてみました。あくまで、初学者(こっちょ)によるやってみた系の記事になりますので、温かい目でご覧ください。
本記事の対象は以下を想定しています。
- 個人利用でデータベースを操作できる環境が欲しい人
- DockerからSQLServerに接続してみたい人
- SSMS(SQL Server Management Studio)からDockerのデータベースに接続したい人
また上記工程で上手く接続できない人にも参考になるような記事になるかもしれません。
ちなみに筆者の動作環境はコチラ↓↓
- windows11
- Docker Desktop(Docker version 26.0.0) 導入済
- SSMS(19.2)導入済
※各種ツールをまだインストールしてない方向けの案内は後述しますのでご安心下さい!
(本記事は2024/07現在の情報を基に作成しています)

では早速行きましょう!
初期状態の確認
まだDocker自体のインストールがお済でない方は、以下のURLを参考に「Docker Desktop」のインストールをオススメします。
Docker Desktop インストール手順 – Qiita
URLの記事ではWindows版・Mac版のインストール手順を解説しておりますので、こちらに沿って進めていくのが良いと思います。Docker Desktopをインストールするだけで仮想環境に必要なものを一式用意できるので楽チンです。

私の場合、インストールは約15分くらいで終わりました!
Docker Desktopがすでにインストール済という方は、Docker Desktopを起動し「Images」タブを開いて状態を確認できればOKです。この画面では、ローカルに保存されているDockerイメージの一覧が表示されてますね。

ちなみに「Containers」タブを開いて、コンテナの状態も確認しておきましょう。画面では、現在存在しているDockerコンテナの一覧が表示されます。

このような状態が整っていれば、準備OKです!
①DockerにSQL Serverを起動
ではWindows PowerShellでSQL Serverコンテナを起動するためのコマンドを実行して行きましょう!
公式ドキュメントではイメージをプルしてからコンテナを起動させているようですが、私は一文で済ませたかったため、「Docker run」コマンドで pull → create → start の操作を一気に実行させました。

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<passXXXXX>" -p 1433:1433 --name sql1 --hostname sql1 -d mcr.microsoft.com/mssql/server:2022-latest
コマンドを解説していきますね。

- ①:Dockerコンテナを新規に作成して実行するコマンド。
- ②:環境変数 ACCEPT_EULA を Y に設定。これはSQL Serverのエンドユーザーライセンス契約(EULA)に同意するために必要です。
- ③:環境変数
MSSQL_SA_PASSWORD
を指定されたパスワード(例:<passXXXXXX>
)に設定。SQL Serverのシステム管理者(SA)アカウントのパスワードなので忘れずに。 - ④:ホストのポート 1433 をコンテナのポート 1433 にマッピングします。ホストマシンからSQL Serverに接続する際に指定します。
- ⑤:コンテナ名。
- ⑥:コンテナのホスト名。
- ⑦:「-d」はコンテナをバックグラウンドモードで実行、「mcr.microsoft.com/mssql/server:2022-latest」は使用するDockerイメージを指定しています。ここでは執筆時最新版のSQL Server2022を指定しています。

必要があれば、先頭に「sudo」コマンドを入れてください
実行時注意していただきたいポイントはパスワードの設定です。公式ドキュメントでは、
既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。
Docker:SQL Server on Linux 用のコンテナーのインストール – SQL Server | Microsoft Learn
とのことで、あまりに弱い文字列のパスワードを設定すると、はじかれる場合があるので気を付けましょう!また同じパスワード関連で個人的につまずいたポイントもここで挙げておきます。
上記のコマンドだと、パスワードを指定する箇所が「…PASSWORD=<>”」となっており、一見すると「<>」の中が任意のパスワード指定なのでは?と思ったのですが、実際は「<>」もパスワードに含まれていました(笑) 慣れてない私は2回目のログイン時に苦労した次第ですが、皆さんならきっと大丈夫でしょう!
説明が長くなりましたが、それでは上記コマンドを実行してみましょう!実行すると、新しいSQL Serverコンテナがバックグラウンドで一気に起動します!私の環境だと起動完了まで約10分くらいでしたね!

実行後、Docker Desktopでも確認してきます。以下は「Containers」タブの画面です。少し見づらいですが、ステータスが起動中を示す「Running」状態になっていますね!

このあとは作成したコンテナ内に入り、実際にサンプルテーブルを作成していきます。
②コンテナ内のSQL Serverに入る
ここでは、起動したSQL Serverコンテナに接続 → データベース作成 → テーブル作成 の順に行っていきます。まずコンテナ内で先ほど設定したユーザー/パスワードを使ってコマンドを実行しましょう。

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<passXXXXXX>"
もしWindows PowerShellからコンテナを操作する場合は、上記のコマンドの前に「docker exec -it sql1」を追加すれば可能です。※「sql1」はご自身の環境にあったコンテナ名をご指定ください

正常に実行されると、画像のようにコマンドプロンプト部分が「1>」の表記になることが確認できます。ここからはSQLを実行していきます。
※以降の内容は必須ではありませんが、のちの接続確認を分かりやすくするため実施している内容です。ご自身に合った内容に変更しても構いません
試しに「CREATE DATABASE」コマンドを使用してデータベース名「SampleDB」を作成していきます。私はここでSQL Serverの実行には「GO」コマンドが必要であることを初めて知りました(笑)

CREATE DATABASE SampleDB;
GO
USE SampleDB;
GO
「USE」コマンドは現在のデータベースをSampleDBに切り替えるため実行します。
そのまま、テーブルも作成していきましょう!新規テーブル作成は「CREATE TABLE」です。

CREATE TABLE Customers (
CustomerID INT PRIMARY KEY IDENTITY(1,1),
FirstName NVARCHAR(50),
LastName NVARCHAR(50),
Email NVARCHAR(100),
RegistrationDate DATETIME
);
GO
つづいて「INSERT」で3行分のサンプルデータを挿入します。コマンドは以下です。

INSERT INTO Customers (FirstName, LastName, Email, RegistrationDate)
VALUES ('John', 'Doe', 'john.doe@example.com', GETDATE()),
('Jane', 'Smith', 'jane.smith@example.com', GETDATE()),
('Michael', 'Johnson', 'michael.johnson@example.com', GETDATE());
GO
正常に作成できたか確認も行ってみましょう。

SELECT * FROM Customers;
GO
3行分のサンプルデータが確認できました。ここでは少し見づらいですが、この後行う「SSMS(SQL Server Management Studio)」ではより可視性が高くなります。
以上でDockerコンテナ内での作業を終了です。SQL Serverを出る際は、「QUIT」を実行すればOKです。
③SSMSからDockerコンテナに接続
いよいよ、SSMS(SQL Server Management Studio)の出番です。
先ほど作成したDockerコンテナは起動させておいてくださいね。

SSMS起動後、サーバーへの接続が求められます。筆者の指定方法は以下にまとめています。

- サーバー名 localhost,1433 ※間に「;」を指定しない点に注意
- 認証 SQL Server 認証
- ログイン sa
- パスワード 任意のPW
正常に起動されると、Dockerで作成したデータベースのオブジェクト一覧などが表示されます。
ではクエリウィンドウで先ほどと同じSQL「SELECT * FROM Customers;」を入力してみましょう!

結果が正しく表示されましたね!
以上で「SSMSからDockerコンテナに接続」は終了です。

ここからはお片付けだね!
作業を終えたらDockerコンテナの停止をお忘れなく!Docker Desktopでも可能ですが、ここではPowerShellでのコマンド操作を行ってみます。
docker container stop sql1
停止後、再起動は以下です。
docker container start sql1
さいごに
本記事では、初学者向けにDockerにSQL Serverのセットアップを行い、SSMSから接続を試すとこまで行いました。この短時間で本格的なデータベースを構築できるなんて、改めて驚かされました。
ここではSQL Serverを使用しましたが、他にも「Oracle」や「MySQL」といった製品も扱うことができるため機会があれば学習してみたいと思います。
本日は最後までお読みいただき、ありがとうございました。
コメント