1.はじめに
データベースサーバ SQLServer を普段使いする機会が増えてきたので、頻繁に行う内容を覚え書きしてます。(随時追記)
試行環境
- Ubuntu Linux 22.04
- 「Express版」SQL Server Express - Wikipedia での構築例
Linux hostname 5.15.0-43-generic #46-Ubuntu SMP Tue Jul 12 10:30:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
Dockerのインストール
Ubuntu22の標準パッケージを使います。(Docker公式リポジトリでもOK)
$ sudo apt install docker.io docker-compose -y $ docker -v Docker version 20.10.12, build 20.10.12-0ubuntu4 $ docker-compose -v docker-compose version 1.29.2, build unknown
2.サーバ準備 on Docker
DockerHubにイメージがあります。 https://hub.docker.com/_/microsoft-mssql-server
(1)準備
ディレクトリ構成は下記を想定しています。
+ [mssql/] + [data/] + [log/] + [sec/] + .env + docker-compose.yaml ※: […/]:ディレクトリ
ディレクトリと空ファイルを作成します。さらに一部のディレクトリのパーミッションを変更します。
$ mkdir -p mssql\data mssql\log mssql\sec $ sudo chown 10001:0 mssql\data mssql\log mssql\sec $ touch mssql\.env mssql\docker-compose.yaml $ cd mssql
(2)ファイルに記述
docker-compose.yaml
version: '3' # --------------------------------------------------------- # DockerComposeの定義 # --------------------------------------------------------- services: mssql: #イメージ image: mcr.microsoft.com/mssql/server:2019-latest #コンテナ名 container_name: mssql-mine #ホスト名 hostname: mssql-mine ports: # ポート番号(ホスト側:ゲスト側) - 1433:1433 environment: - ACCEPT_EULA=Y # パスワード - SA_PASSWORD=KVLVuwWXA9TH # ロケールID(コンソールに出力される文字) # - MSSQL_LCID=1041 # 日本語の場合 - MSSQL_LCID=1033 # English - United States の場合 # SQL Serverのエディションまたはプロダクトキーを指定 - MSSQL_PID=Express # 照合順 - MSSQL_COLLATION=Japanese_CI_AS volumes: # 永続化したいデータのマウント先(ホスト側:ゲスト側) - ./mssql/data:/var/opt/mssql/data - ./mssql/log:/var/opt/mssql/log - ./mssql/sec:/var/opt/mssql/sec
.env
# --------------------------------------------------------- # DockerComposeの定義・環境変数 # --------------------------------------------------------- # プロジェクト名 COMPOSE_PROJECT_NAME=mssql-mine
注意事項
- パスワードはある程度複雑なものを与えてください
- ロケールID
- マウント先。コンテナからは、このなかに、オーナー
10001
、グループ0
(root) でファイルが作られるので、マウント先のディレクトリのパーミッションを変更しておくこと .env
ファイルの設定は、docker-compose up
するときのプロジェクト名を決め打ちで指定します。(デフォルトはyamlのあるディレクトリ名が使われます)。無くてもOKですが、プロジェクト名が被りそうな場合はenvファイルの活用が便利です。
(3)起動、停止、他
初回起動のときに、必要なデータファイルが自動的にコピーされます。
$ docker-compose up Recreating mssql-mine ... done Attaching to mssql-mine mssql-mine | SQL Server 2019 will run as non-root by default. ・・・(省略)・・・ 2022-08-10 01:57:06.08 spid18s index restored for msdb.sysoperators. 2022-08-10 01:57:06.50 spid18s The default collation was successfully changed.
ここまできたら、データベース接続ツール(SQL Server Management Studio (SSMS))*1で、接続テストします。
ホスト名 | dockerを動かしているホスト名(リモートから接続もOK) |
ユーザ | sa |
パスワード | (自身で指定したパスワード) |
接続確認出来たら、いったん終了して、Dockerも停止します。
[Ctrl-C] Gracefully stopping... (press Ctrl+C again to force) Stopping mssql-mine ... done $ docker-compose up -d Creating mssql-mine ... done
最後に、デタッチ起動して完了です。
その他の操作
走査 | コマンド |
---|---|
イメージのビルド | $ docker-compose build |
起動 | $ docker-compose up 停止時は[Ctrl-C] |
起動(デタッチ・起動後にターミナルに戻る) | $ docker-compose up -d |
起動中のコンテナのシェルに入る | $ docker exec -it <コンテナ名> /bin/bash |
コンテナ一時停止・破棄なし | $ docker-compose stop |
コンテナ再開 | $ docker-compose start |
コンテナ停止と破棄 | $ docker-compose down |
コンテナ停止と破棄とボリュームも削除(ホストにマウントしていたところはそのまま残る) | $ docker-compose down -v |
3.SQL構文例
(随時)