SQLCMDをDockerで動かす


# 概要

## 20170412追記

    公式のsqlserverのDockerイメージにtoolsも含まれるようになっている、とコメントで教えていただきました。
    https://github.com/Microsoft/mssql-docker/issues/8
    本体はいらない、簡易に確認するsqlcmdとかbcpが入った軽量なのを作ろうという趣で読むと良いと思います。

追加終わり.



[SQLServerをLinux Dockerで動かしてみる](http://qiita.com/kirareyaku/items/3c898d8616e05eb2c021)に引き続き、sqlcmdコマンドを発行できるコンテナの作成に挑みます。

[Install SQL Server tools on Linux](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)の内容に従って、mssql-toolsを動かせるコンテナを作成します。

    注意：インストーラの中でライセンスの確認部分があるので、Dockerのイメージの配布は行わず、Dockerfileの中身を書きます

    
# Dockerfile

```Dockerfile
FROM centos:latest
MAINTAINER tsgkadot <tsgkadot@gmail.com>

ENV ACCEPT_EULA=Y 

RUN \
    curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo && \
    yum install -y mssql-tools && \
    yum clean all
```

yumレポジトリに追加し、yum install -y mssql-toolsとするだけです。


## 参考情報

環境変数 ACCEPT_EULAにYを指定します。
もし、この部分がなければ、docker build時に次のようなログが出力され、ビルドに失敗します。

> ENV ACCEPT_EULA=Y

ログの例

```shell-session
Running transaction
  Installing : e2fsprogs-libs-1.42.9-7.el7.x86_64                           1/8 
  Installing : e2fsprogs-1.42.9-7.el7.x86_64                                2/8 
  Installing : 1:make-3.82-21.el7.x86_64                                    3/8 
  Installing : 1:openssl-1.0.1e-51.el7_2.7.x86_64                           4/8 
  Installing : libtool-ltdl-2.4.2-21.el7_2.x86_64                           5/8 
  Installing : unixODBC-utf16-2.3.1-1.x86_64                                6/8 
/var/tmp/rpm-tmp.4DJM99: line 17: /dev/tty: No such device or address
error: %pre(msodbcsql-13.0.1.0-1.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package msodbcsql-13.0.1.0-1.x86_64
error: msodbcsql-13.0.1.0-1.x86_64: install failed
/var/tmp/rpm-tmp.tZ9Ckv: line 4: /dev/tty: No such device or address
error: %pre(mssql-tools-14.0.1.246-1.x86_64) scriptlet failed, exit status 1
Error in PREIN scriptlet in rpm package mssql-tools-14.0.1.246-1.x86_64
  Verifying  : libtool-ltdl-2.4.2-21.el7_2.x86_64                           1/8 
  Verifying  : 1:make-3.82-21.el7.x86_64                                    2/8 
  Verifying  : unixODBC-utf16-2.3.1-1.x86_64                                3/8 
  Verifying  : e2fsprogs-1.42.9-7.el7.x86_64                                4/8 
  Verifying  : 1:openssl-1.0.1e-51.el7_2.7.x86_64                           5/8 
  Verifying  : e2fsprogs-libs-1.42.9-7.el7.x86_64                           6/8 
  Verifying  : msodbcsql-13.0.1.0-1.x86_64                                  7/8 
  Verifying  : mssql-tools-14.0.1.246-1.x86_64                              8/8 

Dependency Installed:
  e2fsprogs.x86_64 0:1.42.9-7.el7        e2fsprogs-libs.x86_64 0:1.42.9-7.el7  
  libtool-ltdl.x86_64 0:2.4.2-21.el7_2   make.x86_64 1:3.82-21.el7             
  openssl.x86_64 1:1.0.1e-51.el7_2.7     unixODBC-utf16.x86_64 0:2.3.1-1       

Failed:
  msodbcsql.x86_64 0:13.0.1.0-1        mssql-tools.x86_64 0:14.0.1.246-1       

Complete!
The command '/bin/sh -c curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/msprod.repo &&     yum install -y mssql-tools' returned a non-zero code: 1
```

まっさらな環境に、mssql-toolsをインストールする際には、実際は２回、ライセンス条項を確認してYESを入力する必要があります。

- msodbcsqlインストール時
- mssql-toolsインストール時

[Linux に SQL Server 用 Microsoft ODBC Driver をインストールする](https://msdn.microsoft.com/ja-jp/library/hh568454(v=sql.110).aspx)によると、サイレントインストールにはACCEPT_EULA=yを使え、とあります。

```
#for silent install use ACCEPT_EULA=Y yum install msodbcsql
```

ACCEPT_EULAを使わずYESコマンドで逃げようとしてもダメでした。

# 使用例

[SQLServerをLinux Dockerで動かしてみる](http://qiita.com/kirareyaku/items/3c898d8616e05eb2c021)で立てたSQLServerに接続して、Select文を発行してみます。

```shell-session
docker run --rm -it ビルドしたイメージ sqlcmd -S 192.168.144.xx -U sa -P P@55w0rd
1> 
2> 
3> use DevBBS
4> select count(*) from Master2
5> go
Changed database context to 'DevBBS'.
           
-----------
      88150

(1 rows affected)
1> 

```

おおお、件数が取得できました！（Dobon.NET風）