Dockerを使用してホスト環境を汚さずにmssql-server-linuxを使う

2020/09/26に公開

TL;DR

  • DBのためだけに開発環境にSQLServer入れるのは好ましくないのでDockerを使おう
  • ローカル環境にはDocker Desktopとvisual studio codeのみインストール
  • mssql-server-linuxのdocker-composeのサンプルが少ないので記事を書いた

参考にしたサイト

マイクロソフト公式リポジトリ内のコンテナサンプル
https://github.com/microsoft/sql-server-samples/tree/master/samples/containers

作成したサンプルリポジトリ

https://github.com/MegaBlackLabel/mssql-server-linux-sample

環境

  • Windows10
  • Docker Desktop 2.2.0.3
  • docker-composeはDocker Desktopに同梱
  • mssql-server-linux 2017-latest
  • visual studio code 1.42.1[SQL Server (mssql)でDBに接続]

ファイル

\---mssql-server-linux-sample
    |   .gitignore
    |   db-init.sh
    |   db-init.sql
    |   docker-compose.yml
    |   Dockerfile
    |   entrypoint.sh
    |
    \---backup
            dbo.members.csv
Dockerfile
FROM microsoft/mssql-server-linux:2017-latest

COPY . /usr/src/docker

WORKDIR /usr/src/docker

RUN chmod +x ./db-init.sh

CMD /bin/bash ./entrypoint.sh
docker-compose.yml
version: "3"
services:
    db:
        build: ./
        environment:
            SA_PASSWORD: "MssqlPass123"
            ACCEPT_EULA: "Y"
            MSSQL_AGENT_ENABLED: "true"
        ports:
            - "1433:1433"
        container_name: db1
        hostname: db1
        volumes:
            - ms-sqlserver-linux-sample-data:/var/opt/mssql
            - ./backup:/backup
volumes:
    ms-sqlserver-linux-sample-data:
        driver: local

※、MSSQL_AGENT_ENABLEDをtrueにするとSQLServerが落ちないで起動し続ける

entrypoint.sh
#start SQL Server, start the script to create/setup the DB
 ./db-init.sh & /opt/mssql/bin/sqlservr

※、DB初期化スクリプトとSQLServer起動を実施

db-init.sh
#start SQL Server, start the script to create/setup the DB
 #wait for the SQL Server to come up
sleep 10s

echo "running set up script"
#run the setup script to create the DB and the schema in the DB
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P MssqlPass123 -d master -i db-init.sql
db-init.sql
CREATE DATABASE testdb;
go

use testdb;
go

DROP TABLE IF EXISTS members;
GO

CREATE TABLE members(
    id int identity(1,1) primary key,
    name nvarchar(32),
    birthday datetime
);
GO

BULK INSERT members
FROM '/usr/src/docker/backup/dbo.members.csv'
WITH
(
   FIELDTERMINATOR = ',',
   ROWTERMINATOR = '\n'
);
GO

※、DB作成、テーブル作成、データ投入を実施。データはvolumesに登録されている

docker-composeビルド

コンテナのビルドを実施
docker-compose build

docker-compose起動

ビルドしたコンテナをバックグラウンドで起動
docker-compose up -d

docker-compose終了

コンテナを初期化して終了
docker-compose down

DBへの接続

2020-03-09.png

※、コンテナが起動中に以下の手順を実施

  1. SQL Server (mssql)をvisual studio codeにインストールすると、サイドバーにDBのアイコンが表示されるので選択
  2. COONNECTIONSにカーソルを合わせると「+」アイコンが出るので押下
  3. servername:localhost
  4. Database Name:testdb
  5. SQL Loginを選択
  6. ユーザ名:sa
  7. パスワード:MssqlPass123
  8. Save Password:No
  9. Display Name:任意の名前

これでDBに接続できるのでdbo.membersを選択してデータが登録されているか確認します。

2020-03-09 (2).png

以上

Discussion