pyodbcが動くdockerコンテナの作り方


pythonを使ってSQLServerのデータを操作するときに使えるpyodbcをdockerコンテナで動かそうと思って作ったお話です。

作ったDockerfile

下記の設定で警告出ずに作れました。ここには最低限のものしか入ってないので、必要があれば追加してください。

FROM python:3.6.4
# 環境変数
ENV DEBIAN_FRONTEND noninteractive
ENV DEBCONF_NOWARNINGS yes

# インストールに必要なライブラリ
RUN apt-get update && \
    apt-get install -y apt-utils apt-transport-https

# ms製のライブラリ入れるために必要
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/8/prod.list > /etc/apt/sources.list.d/mssql-release.list

# 反映
RUN apt-get update

# pyodbc動かすために必要になるライブラリ達
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17 && \
    ACCEPT_EULA=Y apt-get install -y mssql-tools && \
    ACCEPT_EULA=Y apt-get install -y unixodbc-dev

# goal
RUN pip install --upgrade pip && \
    pip install pyodbc

解説

いくつか補足で説明をします

環境変数

DEBIAN_FRONTENDはDebian Installer パラメータと呼ばれるもので, noninteractiveにしておけば Debian Package をインストールする際に手動設定をスキップしてくれます。
参考: https://www.debian.org/releases/sarge/s390/ch05s02.html.ja

DEBCONF_NOWARNINGSは最初のapt-utilsのインストールの時にapt-utilsが無いことが原因であるとの旨の警告があり、ジレンマなので無理やり消しています(いい方法があれば知りたい)

インストールに必要なライブラリ

apt-get install -y apt-utils apt-transport-https

apt-utilsは入れておかないと警告が出てしまうので入れてます。
apt-transport-httpsはms用のライブラリを入れる時にhttpsが使われるので必要です。

ms製のライブラリ入れる

ここは公式ドキュメントに準じているだけです。
https://docs.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017

公式にあった

https://github.com/Microsoft/mssql-docker/tree/master/oss-drivers/pyodbc
公式にいい感じのが用意されてるのに気づいたのは最近。こっち使った方がいいと思いますが、debianでやりたいとか何かしらの事情で自前で作りたい時に参考になれば。