訳あって 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
- Advanced
で Memory
を 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 ファイルを流し込めるのが便利!