MS SQLServer を docker-compose で動かして sql-cli で操作

2018/07/11   #SQL Server  #Docker 
このエントリーをはてなブックマークに追加

訳あって SQL Server を使わないといけないので Docker でサクッとやりたいと思ったので、環境を整えてみる。

docker-compose.yml

version: '3.2'
services:
  foo-db:
    image: microsoft/mssql-server-linux:2017-GA
    volumes:
      - foo-db-data:/var/opt/mssql/
    environment:
      ACCEPT_EULA: Y
      MSSQL_SA_PASSWORD: P@ssw0rd!
    ports:
      - "1433:1433"
volumes:
  foo-db-data:
    driver: local

実行

$ docker-compose up -d

SQL Server がサクッと動く時代なんですなー

トラブルシューティング

最初 Exited になってしまった。

$ docker ps -a
CONTAINER ID        IMAGE                                  COMMAND                  CREATED             STATUS                      PORTS                    NAMES
c6fb0b2baa15        microsoft/mssql-server-linux:2017-GA   "/bin/sh -c /opt/mss…"   2 seconds ago       Exited (1) 4 seconds ago                             docker_foo-db_1
$ docker ps -a --no-trunc
CONTAINER ID                                                       IMAGE                                  COMMAND                                                CREATED              STATUS                          PORTS                    NAMES
c6fb0b2baa15571141712a9a5f1b5e43cf4ed2d35d865daa76043f0a365b41ee   microsoft/mssql-server-linux:2017-GA   "/bin/sh -c /opt/mssql/bin/sqlservr"                   About a minute ago   Exited (1) About a minute ago                            docker_foo-db_1

どうやら /bin/sh -c /opt/mssql/bin/sqlservr コマンドの実行でコケてる模様。

エラーメッセージを見るために commit して手動で実行する。

$ docker commit -m "exited" c6fb0b2baa15571141712a9a5f1b5e43cf4ed2d35d865daa76043f0a365b41ee
sha256:c5e70ed4897db6e1b28a96eefe41b1599cbe342865807a3eebc616416dc31c22

$ docker run --rm -it c5e70ed4897db6e1b28a96eefe41b1599cbe342865807a3eebc616416dc31c22 bash

コンテナイメージに入ったら先程の /bin/sh -c /opt/mssql/bin/sqlservr を実行してみる。

root@36bb5a5fe041:/# /bin/sh -c /opt/mssql/bin/sqlservr
sqlservr: This program requires a machine with at least 3250 megabytes of memory.

メモリが足りんというオチだった。

Docker for Mac の Preference - AdvancedMemory を 4GB に増やす。
その後、docker-compose up -d をやり直したらうまく動いた。

sql-cli

SQL Server をコマンドライン操作するのに便利な sql-cli というツールがあるので入れる。

hasankhan/sql-cli: Cross platform command line interface for SQL Server

インストール

これはグローバルでよいかなと思ったので -g で。

$ npm install -g sql-cli

接続

$ mssql -s localhost -u sa -p P@ssw0rd!

Connecting to localhost...done

sql-cli version 0.6.2
Enter ".help" for usage hints.
mssql> 

.help でヘルプが見れる。

mssql> .help
command             description                                     
------------------  ------------------------------------------------
.help               Shows this message                              
.databases          Lists all the databases                         
.tables             Lists all the tables                            
.sprocs             Lists all the stored procedures                 
.search TYPE VALUE  Searches for a value of specific type (col|text)
.indexes TABLE      Lists all the indexes of a table                
.read FILENAME      Execute commands in a file                      
.run FILENAME       Execute the file as a sql script                
.schema TABLE       Shows the schema of a table                     
.analyze            Analyzes the database for missing indexes.      
.quit               Exit the cli               

ためしに .databases でデータベースの一覧をみてみる。

mssql> .databases
name  
------
master
model 
msdb  
tempdb

4 row(s) returned

Executed in 1 ms

特に .run で SQL ファイルを流し込めるのが便利!