概要
20170412追記
公式のsqlserverのDockerイメージにtoolsも含まれるようになっている、とコメントで教えていただきました。
https://github.com/Microsoft/mssql-docker/issues/8
本体はいらない、簡易に確認するsqlcmdとかbcpが入った軽量なのを作ろうという趣で読むと良いと思います。
追加終わり.
SQLServerをLinux Dockerで動かしてみるに引き続き、sqlcmdコマンドを発行できるコンテナの作成に挑みます。
Install SQL Server tools on Linuxの内容に従って、mssql-toolsを動かせるコンテナを作成します。
注意:インストーラの中でライセンスの確認部分があるので、Dockerのイメージの配布は行わず、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
ログの例
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をインストールする際には、実際は2回、ライセンス条項を確認してYESを入力する必要があります。
- msodbcsqlインストール時
- mssql-toolsインストール時
Linux に SQL Server 用 Microsoft ODBC Driver をインストールするによると、サイレントインストールにはACCEPT_EULA=yを使え、とあります。
#for silent install use ACCEPT_EULA=Y yum install msodbcsql
ACCEPT_EULAを使わずYESコマンドで逃げようとしてもダメでした。
使用例
SQLServerをLinux Dockerで動かしてみるで立てたSQLServerに接続して、Select文を発行してみます。
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風)