きそくただしいせいかつ

日々の生活のペースセッター

Oracle Instant Client を docker 上で利用して、 ADW へ接続する

Autonomous Data Warehouse Cloud (ADW) を使っていると、ちょっとしたデータや環境の確認のため、 Oracle Instant Client (SQL*Plus など) が使いたい場面があるかと思います。 yum などからもインストール可能なので、入れるのは簡単なのですが、あんまりローカルになんでも入れたくないよな、というときのために、 docker イメージが用意されています。今回はそれを試して見ようと思います。

docker image のデプロイ

まずは docker image をデプロイします。 12.x の docker image は docker hub 上にあるようなのですが、最新のイメージは githubOracle のレポジトリ上にしかなさそうなのでそれを利用します。

Readme はこちらです。 docker-images/OracleInstantClient at master · oracle/docker-images · GitHub

docker とか git は入っている前提でスタートします。そのあたりの良記事はたくさんあると思うので!環境は Oracle Linux 7.6 で試しています。

とりあえず適当なディレクトリに、 Oracle が提要している docker image を git clone で持ってきます。

[opc@kokane-ol7-01 work]$ git clone https://github.com/oracle/docker-images.git

その上で、Oracle Instant Client の docker image のディレクトリに移動し、 docker build します。

[opc@kokane-ol7-01 work]$ cd docker-images/OracleInstantClient/dockerfiles/18.3.0/
[opc@kokane-ol7-01 18.3.0]$ docker build -t oracle/instantclient:18.3.0 .

その後、 docker images で確認すると、 oracle/instantclinent のイメージが確認できます。

[opc@kokane-ol7-01 work]$ docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
oracle/instantclient   18.3.0              e1ec5b52486e        12 days ago         362MB
oraclelinux            7-slim              c3d869388183        3 weeks ago         117MB

docker image の利用と ADW への接続

まずは接続先の ADW の接続用 Credential ファイルをダウンロードします。もし ADW のインスタンスを立ててみる場合には、システムエグゼさんのブログなどに詳しく記載いただいています。 www.system-exe.co.jp

現在は、 Console の ADW の Detail 画面から、DB Connection ボタンをクリックしてダウンロード可能です。

f:id:k_kane:20190211202427p:plain
ADWの詳細
f:id:k_kane:20190211202445p:plain
Credentialをダウンロード

ダウンロードしたファイルをどこか適当なディレクトリに展開頂き、 sqlnet.ora の DIRECTORY を Credential ファイルをおいた場所に変更します。 (ここでは /home/opc/credentials としました)

WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/credentials")))
SSL_SERVER_DN_MATCH=yes

これで docker run する準備が整いました。github の Readme を参考にしつつ、-e で環境変数 TNS_ADMIN、 -v で Credentials を格納したディレクトリを渡す形で実行します。 (-v の渡し方は冗長なので、もっといい書き方があるのかもしれません。。)

[opc@kokane-ol7-02 credentials]$ docker run -ti --rm -e TNS_ADMIN=/home/opc/credentials -v /home/opc/credentials:/home/opc/credentials oracle/instantclient:18.3.0 sqlplus admin/パスワード@kkadw01_low

SQL*Plus: Release 18.0.0.0.0 - Production on Sun Feb 17 05:29:43 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Last Successful login time: Sun Feb 17 2019 05:26:13 +00:00

Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.4.0.0.0

SQL> 

まとめ

docker hub に 18.3 がないのが若干手間ですが、簡単に docker 上で sqlplus を動かすことができました。

とはいえ、Oracle Instant Client ぐらいローカルにいれてもいいんじゃない?という場合は、いまどきは yum からインストールできるそうです。 Oracle Instant Client RPMs Now Available on Oracle Linux Yum Server (yum.oracle.com) | Oracle Linux Blog

Autonomous DB を使う上では、このような形で管理用のインスタンスクラウド上に準備したほうがなにかと便利だなと思っている今日このごろです。