Oracle Graph を Docker 上で構築（後編、バージョン 22.3）

（この手順はバージョン 22.3.0 でテストしています。新しいバージョンについては[こちらの記事](https://qiita.com/ryotayamanaka/items/18374574d3cce7a21213)をご覧ください。）

[前編](https://qiita.com/ryotayamanaka/items/0e2bf7b0d1e00331c7d2)では、Oracle Database をコンテナ上に起動し、これをグラフ・データベースとして使う方法をご説明しました。この環境だけでも、表データからグラフへの[変換やビューの作成](https://qiita.com/ryotayamanaka/items/99a64b10f8f1f6456175)、さらには JSON と組み合わせなど、さまざまな利用方法がありますので、おいおいご紹介していきたいと思います。

ここでは、あくまで構築手順だけに絞って、その後半として Graph Server のためのコンテナを追加する方法をご説明します。次のアーキテクチャ図で、既に 2-tier deployment は構築できているので、これから 3-tier deployment を追加します。

![](https://user-images.githubusercontent.com/4862919/138631261-105c0795-3942-483c-9e01-f28417bf6d59.png)

## Graph Server の構築

Graph Server と Graph Viz が含まれる RPM パッケージと Graph Client が含まれる ZIP ファイルを[こちらのサイト](https://www.oracle.com/database/technologies/spatialandgraph/property-graph-features/graph-server-and-client/graph-server-and-client-downloads.html)からダウンロードします。次のパッケージを選択すると、ライセンスへの同意と Oracle アカウントでのログインを要求されます。

- Oracle Graph Server
- Oracle Graph Client

加えて、JDK 11 を[こちらのサイト](https://www.oracle.com/java/technologies/downloads/#java11)からダウンロードしておきます。こちらも個人用途や開発用途であればライセンス費用がかからないので、安心してお使いいただけます。

- Linux - x64 RPM Package

ここでダウンロードしたこれらの RPM パッケージと次に作成する Dockerfile を同じディレクトリに配置します。

- oracle-graph-21.4.2.x86_64.rpm
- oracle-graph-client-21.4.2.zip
- jdk-11.x.xx_linux-x64_bin.rpm

```
vi Dockerfile
```

`Dockerfile`

```Dockerfile
FROM oraclelinux:7
ARG VERSION_JDK
ARG VERSION_GSC
COPY ./jdk-${VERSION_JDK}_linux-x64_bin.rpm /tmp
COPY ./oracle-graph-${VERSION_GSC}.x86_64.rpm /tmp
COPY ./oracle-graph-client-${VERSION_GSC}.zip /tmp
RUN yum install -y unzip numactl vim python3 python3-devel gcc openssl \
 && yum clean all \
 && rm -rf /var/cache/yum/* \
 && rpm -ivh /tmp/jdk-${VERSION_JDK}_linux-x64_bin.rpm \
 && rpm -ivh /tmp/oracle-graph-${VERSION_GSC}.x86_64.rpm
ENV JAVA_HOME=/usr/java/jdk-${VERSION_JDK}
ENV PATH=$PATH:/opt/oracle/graph/bin
ENV SSL_CERT_FILE=/etc/oracle/graph/ca_certificate.pem
RUN keytool -import -trustcacerts \
    -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit \
    -alias pgx -file /etc/oracle/graph/ca_certificate.pem -noprompt \
 && pip3 install wheel \
 && pip3 install /tmp/oracle-graph-client-${VERSION_GSC}.zip
EXPOSE 7007
WORKDIR /opt/oracle/graph/bin
CMD ["sh", "/opt/oracle/graph/pgx/bin/start-server"]
```

イメージをビルドします。JDK のバージョンは例えば `11.0.13` といったものに置き換えてください。

```
docker build . \
--tag graph-server:21.4.2 \
--build-arg VERSION_GSC=21.4.2 \
--build-arg VERSION_JDK=<version_of_JDK>
```

イメージが完成したらコンテナを起動します。この時点では、データベース接続のための JDBC URL が設定されていないためエラーが表示されます。

```
docker run \
--name graph-server \
--publish 7007:7007 \
graph-server:21.4.2
```

別のコンソールからコンテナに接続し、データベース接続のための JDBC URL を書き換えます。

```
$ docker exec -it graph-server /bin/bash

# vi /etc/oracle/graph/pgx.conf
```

`pgx.conf`

```
"jdbc_url": "jdbc:oracle:thin:@host.docker.internal:1521/xepdb1",
```

ホストに戻り、Graph Server のコンテナを再起動します。ログにエラーが表示されていないことを確認します。

```
# exit

$ docker restart graph-server
$ docker logs -f graph-server
...
INFO: Starting ProtocolHandler ["https-jsse-nio-7007"]
```

## Graph Viz にログイン

ウェブ・ブラウザから Graph Visualization にログインします。

- https://localhost:7007/ui/

自己署名証明書が使われているため、セキュリティ警告が表示されます。

- Chrome: "thisisunsafe" とタイプします
- Firefox: Advanced > Accept the Risk and continue

データベース・ユーザーでログインします。

- User: graphuser
- Password: Welcome1（前編の通りに設定した場合）
- Advanced Options: Database
    - jdbc:oracle:thin:@host.docker.internal:1521/xepdb1

前編で作成したグラフ `GRAPH1` を可視化するため、次の PGQL クエリを実行します。

```
SELECT v1.name, v2.brand, e.since
FROM MATCH (v1)-[e]->(v2)
LIMIT 100
```

ノードやエッジを右クリックするとプロパティの値を確認することができます。

![](https://user-images.githubusercontent.com/4862919/144443544-93f19e36-cf31-4391-9053-e7917abc101f.jpg)

以上で Oracle Graph の環境を作成することができました。この環境を使用して、グラフ・データベースの様々なユースケースを議論していければと思います。