null DockerでSQL Serverを建ててsqlcmd, SSMS, JDBCでアクセスする

こんにちは。おおたにです。

最近プロジェクトでAzure SQL DatabaseやSQL Serverを利用する機会が増えてきたため、開発環境用のSQL ServerをDockerで構築する方法とアクセス方法を備忘代わりに本記事にまとめました。なお、記事執筆時点ではホストOSはWindows 10、SQL Serverは2019あたりを使っています。

 

SQL ServerのDockerコンテナをセットアップする

では早速SQL Serverを建てていきましょう。

まず、DockerとDocker Composeをセットアップします。WindowsであればDocker Desktopをインストールすれば必要なものが全て揃います。

次に、ファイルdocker-compose.ymlを作成します。

version: "3"
services:
  mssql:
    image: mcr.microsoft.com/mssql/server:2019-CU6-ubuntu-16.04
    container_name: mssql-test
    ports:
      - "11433:1433"
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=<パスワード>
      - MSSQL_PID=Express
      - MSSQL_LCID=1041
      - MSSQL_COLLATION=Japanese_CI_AS

各項目で指定すべき内容は以下のとおりです。

  • image : Docker HubのMicrosoft SQL ServerページのFull Tag Listingを参考に、セットアップするSQL Serverのバージョンに応じたタグを指定
  • conainer_name : コンテナ名
  • ports : SQL Serverの1433番ポートをホストOSに公開する設定(上記例ではホストOSの11433番に公開)
  • ACCEPT_EULA : 利用許諾なのでYを指定
  • SA_PASSWORD : saユーザのパスワード
  • MSSQL_PID : 上記Docker Hubページを参考に、セットアップするSQL Serverのエディションを指定(上記例は無償版のExpress Edition)
  • MSSQL_LCID : ロケールIDを指定(1041は日本語)
  • MSSQL_COLLATION : 照合順序を指定(日本語の場合はJapanese_CI_ASあたり)

最後に、ymlファイルを作成したフォルダに移動して以下のコマンドを実行します。Dockerコンテナがビルドされ起動します。

docker-compose up -d

はい、簡単にセットアップできました!

 

Dockerコンテナ上のSQL Serverにアクセスする

では、SQL Serverにアクセスしてみましょう。

sqlcmdでアクセスする

SQL ServevrのCLIツールであるsqlcmdを使う場合は、以下のコマンドを実行します。

docker exec -it mssql-server /opt/mssql-tools/bin/sqlcmd -U sa -P <パスワード>

必要に応じて適宜オプションを追加してください。個人的には長い値も表示できるように-yオプションを指定することが多いです。

SSMS(SQL Server Management Studio)でアクセスする

GUIツールが必要な場合はSSMSを利用します。まずはこちらのページからダウンロードしてインストールします。

Microsoft SQL Server Management Studioを起動するとサーバ接続画面が表示されるので、以下のように設定して接続します。

  • Server type : Database Engine
  • Server name : localhost,<ポート番号> ※ ポート番号指定にコロン:を使うと接続できません(他のDBも利用してるとよくやってしまう…)
  • Authentication : SQL Server Authentication
  • Login : sa
  • Password : saユーザのパスワード

無事接続できると、SQL Serverの操作ができるようになります。

JDBCで接続する

弊社ではLiferay/AlfrescoといったJavaベースの商用オープンソースソフトウェアの開発導入を行っているため、JDBCでのDB接続を行うことが多いです。SQL ServerについてもMicrosoft謹製のJDBCドライバが提供されており、これを利用してデータベース接続を行います。

まずはMicrosoft JDBC Driver for SQL Server support matrixを確認し、環境にあったJDBCドライバを選択しダウンロードします。

JDBCクラス名はcom.microsoft.sqlserver.jdbc.SQLServerDriver、接続文字列はjdbc:sqlserver://サーバ名:ポート番号;databaseName=データベース名です。インスタンス名がある場合など追加の指定が必要な場合はこちらのドキュメントを参考にしてください。あとは以下のような感じで接続できるかと思います。JNDIリソースを定義する際もこの接続文字列を利用します。

try {
	Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
} catch (ClassNotFoundException e) {
	e.printStackTrace();
	return;
}

String connectionString = "jdbc:sqlserver://localhost:11433;databaseName=sampledb";
String username = "sa";
String password = "password";

try (
        Connection connection = DriverManager.getConnection(connectionString, username, password);
        Statement statement = connection.createStatement()) {
    ResultSet resultSet = statement.executeQuery("select * from ...");
    ...

 

今回の記事は以上になります。皆さんも是非DockerでSQL Server環境を構築してみてください。

RANKING
2020.10.12
2020.11.19
2020.12.23
2020.10.05
2020.11.25