ExploratoryサーバーにODBCドライバーをインストールするには、デフォルトのR実行環境のDockerイメージを元に、ODBCドライバーの入ったDockerイメージを作成して使用します。このドキュメントではその手順を説明します。
以下のコマンドで、デフォルトのr-exploratory Dockerイメージをベースに、Dockerコンテナを起動します。 この例では、Exploratoryサーバーのバージョンは6.12.3.6を前提として説明しますが、サーバーのバージョンが違う場合は、コマンド内のバージョン番号を適宜置き換えてください。
docker run -it r-exploratory:6.12.3.6 /bin/bash上のコマンドを実行すると、Dockerコンテナ内で実行されるシェルが表示されます。
シェル上から、ODBCドライバーをインスールします。ここでは、Amazon Redshift ODBC ドライバー バージョン2.0.0.1の例を紹介します。
以下のコマンドを実行して、ODBCドライバーをダウンロードしてインストールします。
curl -O https://s3.amazonaws.com/redshift-downloads/drivers/odbc/2.0.0.1/AmazonRedshiftODBC-64-bit-2.0.0.1.x86_64.rpm && alien -i AmazonRedshiftODBC-64-bit-2.0.0.1.x86_64.rpm設定ファイルを編集するために、テキストエディタをインストールします。ここでは、Vimのインストール方法を紹介します。
apt-get -y --no-install-recommends install vim以下のコマンドを実行して、ODBCの設定ファイルの場所を調べます。
odbcinst -j出力例は以下のとおりです。/etc/odbcinst.iniが設定ファイル、ということがわかります。
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8/etc/odbcinst.iniを編集して、ODBCドライバーを追加します。ここでは、/opt/amazon/redshiftodbcx64に追加されたRedshiftのドライバーを追加します。
先程インストールしたエディタを利用して、/etc/odbcinst.iniを編集します。Vimを使って編集するには、以下のコマンドを実行します。
vim /etc/odbcinst.iniファイルの最後尾に移動して、以下のセクションを追加します。
[Amazon Redshift ODBC Driver (x64)]
Driver=/opt/amazon/redshiftodbcx64/librsodbc64.so
Setup=/opt/amazon/redshiftodbcx64/librsodbc64.so最終的な /etc/odbcinst.ini は以下のようになります。
ODBCの設定を行ったDockerのコンテナIDを取得します。今作業していたシェルは閉じずに、同じLinuxマシン上でもう一つ別のシェルを起動して、以下のコマンドを実行します。
docker psすると、以下のような表が出力されます。
CONTAINER ID        IMAGE                    COMMAND         PORTS       
aad6f8d956a9        r-exploratory:6.12.3.6   "/bin/bash"    6311/tcp     表中でIMAGEがr-exploratory:6.12.3.6、COMMANDが"/bin/bash"となっている行が、先程のDockerコンテナを表す行です。この行のCONTAINER IDの値が、必要なコンテナIDです。この例では、aad6f8d956a9がコンテナIDとなります。
こちらのコンテナIDを指定して、コンテナに加えた変更を保持したDockerイメージを作成します。この例では、この新しいDockerイメージのバージョンを6.12.3.6.1 としています。
docker commit  -c 'CMD ["R", "-e", "Rserve::run.Rserve(remote=TRUE)"]' -c 'EXPOSE 6311' aad6f8d956a9 r-exploratory:6.12.3.6.1作成したDockerイメージを元にDockerコンテナを起動して、変更がうまく追加されているか確認します。
docker run -it r-exploratory:6.12.3.6.1 /bin/bash表示されるシェル内でRを起動します。
RRの中で、 odbc::odbcListDrivers() というコマンドを実行して、RedshiftのODBCドライバーが追加されていることを確認します。
> odbc::odbcListDrivers()
                                name        attribute
1                    PostgreSQL ANSI      Description
2                    PostgreSQL ANSI           Driver
3                    PostgreSQL ANSI            Setup
4                    PostgreSQL ANSI            Debug
5                    PostgreSQL ANSI          CommLog
6                    PostgreSQL ANSI       UsageCount
7                 PostgreSQL Unicode      Description
8                 PostgreSQL Unicode           Driver
9                 PostgreSQL Unicode            Setup
10                PostgreSQL Unicode            Debug
11                PostgreSQL Unicode          CommLog
12                PostgreSQL Unicode       UsageCount
13     ODBC Driver 18 for SQL Server      Description
14     ODBC Driver 18 for SQL Server           Driver
15     ODBC Driver 18 for SQL Server       UsageCount
16               SnowflakeDSIIDriver         APILevel
17               SnowflakeDSIIDriver ConnectFunctions
18               SnowflakeDSIIDriver      Description
19               SnowflakeDSIIDriver           Driver
20               SnowflakeDSIIDriver    DriverODBCVer
21               SnowflakeDSIIDriver         SQLLevel
22 Amazon Redshift ODBC Driver (x64)           Driver
23 Amazon Redshift ODBC Driver (x64)            Setup
                                                       value
1                      PostgreSQL ODBC driver (ANSI version)
2                                               psqlodbca.so
3                                            libodbcpsqlS.so
4                                                          0
5                                                          1
6                                                          1
7                   PostgreSQL ODBC driver (Unicode version)
8                                               psqlodbcw.so
9                                            libodbcpsqlS.so
10                                                         0
11                                                         1
12                                                         1
13                   Microsoft ODBC Driver 18 for SQL Server
14 /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.1.so.2.1
15                                                         1
16                                                         1
17                                                       YYY
18                                            Snowflake DSII
19             /usr/lib64/snowflake/odbc/lib/libSnowflake.so
20                                                     03.52
21                                                         1
22                /opt/amazon/redshiftodbcx64/librsodbc64.so
23                /opt/amazon/redshiftodbcx64/librsodbc64.so
docker-compose.ymlファイルをエディタで開いて、以下のようにr-exploratory Dockerイメージのバージョンを指定している行を見つけます。
...
  rserve:
    image: r-exploratory:6.12.3.6
...
こちらのバージョンを、作成したカスタムDockerコンテナのもので置き換えます。
...
  rserve:
    image: r-exploratory:6.12.3.6.1
...
これで、Exploratoryサーバーを再起動すれば、変更を入れたRの実行環境がExploratoryサーバー上で使用されるようになります。