11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-03-09

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

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

環境

  • 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

以上

11
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?