« 続:BSoDとの戦いに挑む | トップページ | 続々:BSoDとの戦いに挑む »

2019年7月20日 (土)

DockerにSQL Serverを追い出す件

追い出したい

僕のPCには開発用と称して

  • PostgreSQL 9.6
  • MySQL 8
  • Microsoft SQL Server 2017 Developer

をセットアップしているんだが、ホスト環境にそのままセットアップしているとこういった不満が出てくる(という私見)。

  • アップグレードは簡単にしたい
  • DBMSはアプリと1対1対応させたい
  • 開発していないときは、DBMSのプロセスを下げたい

こんなところか。
ということで、手始めにSQL ServerをDockerに追い出してみることにする。

SQL Server on Docker

いまどきのSQL ServerはLinux上でも動かせるエディションがリリースされているので、Microsoftも公式Dockerイメージを公開している。
今回はホスト環境にデータを永続化しておきたいので、Docker Hubの記載をもとにdocker-compose.ymlをかいてみた。

まだホスト環境でSQL Serverが稼働中なので、ホスト環境からの接続ポートを1433から14330に変更している。

version: '3'

 

services:
# Microsoft SQL Server 2017 Linux (Developer Edition)
db:
image: mcr.microsoft.com/mssql/server:2017-latest
container_name: mssql2017dev
environment:
ACCEPT_EULA: Y
# If you runs in production environment, you should change sa password.
SA_PASSWORD: P@ssw0rd2017
# If you have valid Product ID, set MSSQL_PID valiable.
# See : https://hub.docker.com/_/microsoft-mssql-server
#MSSQL_PID: Express
volumes:
- ./data/data:/var/opt/mssql/data
- ./data/log:/var/opt/mssql/log
ports:
- 14330:1433

docker-compose.ymlを置いているディレクトリで、PowerShellからこう叩くとDocker上にSQL Serverが立ち上がる。

PS> mkdir .\data\data
PS> mkdir .\data\log
PS> docker-compose up -d

 

ツールで接続する

 

立ち上がったら、ホスト環境のsqlcmdで接続して動作確認。

PS> sqlcmd -S localhost,14330 -U sa -P P@ssw0rd2017

注意点としては、ポートの指定がよくあるコロン(:)ではなくカンマ(,)だということ。MSDNにはちゃんと書かれているけれど、これは初見殺しだよなぁ。

接続ができたら、今度はSQL Server Management Studioを使えるようにしてみる。接続ダイアログのサーバ名は、sqlcmdの時同様の書き方でよい。

Connwithssms

これでSQL ServerをDockerに追い出せたので、データ移行をこなせば追い出しが完了する見込み。

 

プロジェクト的なもの

GitHubにプロジェクト的なものを上げてます。
ご参考あれ。

2019/07/20 15:58更新

文字化け対策で文字コードと照合順序を設定する記事がQiitaにあったので、それに合わせてdocker-compose.ymlを修正。

version: '3'

services:
  # Microsoft SQL Server 2017 Linux (Developer Edition)
  db:
    image: mcr.microsoft.com/mssql/server:2017-latest
    container_name: mssql2017dev
    environment:
      ACCEPT_EULA: Y
      # If you runs in production environment, you should change sa password.
      SA_PASSWORD: P@ssw0rd2017
      # If you have valid Product ID, set MSSQL_PID valiable.
      # See : https://hub.docker.com/_/microsoft-mssql-server
      #MSSQL_PID: Express
      # Against Garbled, set to Japanese environment.
      MSSQL_LCID: 1041
      MSSQL_COLLATION: Japanese_CI_AS
    volumes:
      - ./data/data:/var/opt/mssql/data
      - ./data/log:/var/opt/mssql/log
    ports:
      - 14330:1433

|

« 続:BSoDとの戦いに挑む | トップページ | 続々:BSoDとの戦いに挑む »

コメント

コメントを書く



(ウェブ上には掲載しません)




« 続:BSoDとの戦いに挑む | トップページ | 続々:BSoDとの戦いに挑む »