はじめに
CData 技術ディレクター桑島です。Dockerコンテナ上でCData API Server を使いたい というお問い合わせを沢山いただきます。そこで、CData APIServer をDockerコンテナで動かす最もシンプルな方法をご紹介します。
構成
Docker環境
今回は、macOS上にDocker環境を作成します。Docker Desktop on masOSをインストールします。
hub.docker.com
Java Application Server(Tomcat)
CData APIServerを動作させるWeb Application Serverは、Docker Hub オフィシャルイメージ内の最新(Latest)のApache Tomcatを利用します。
hub.docker.com
CData APIServer
CData API Serverは、Windows(.NET Edition)とCrossPlatform(Java Edition)があります。本シナリオではCrossPlatform(Java Edition)を利用します。CData APIServerは下記ページからダウンロードできます。
www.cdata.com
CData APIServerリポジトリDB
作成したAPI定義やアクセスユーザ、アクセスログのデータを永続化するため、CData APIServerのこれらのデータを格納するデータベース(リポジトリDB)をMySQLに格納します。MySQLには事前にSchema(本例ではapiserver)を作成しておきます。
手順
インプットの準備
以下のファイルを一つのディレクトリに格納します。
- apiserver.war
- Dockerfile
- Server.xml
- tomcat-users.xml
DockerFile, Server.xml, tomcat-users.xmlは以下のファイルを利用します。
Dockerfile
- Dcoker Hubから最新のTomcatイメージを取得
- apiserver.warをtomcatのwebappsに配置
- TomcatのConfigファイル(tomcat-users.xml / server.xml)をconfに配置
FROM tomcat:latest
ADD ./apiserver.war /usr/local/tomcat/webapps
ADD ./tomcat-users.xml /usr/local/tomcat/conf
ADD ./server.xml /usr/local/tomcat/conf
Server.xml
- APIServerからMySQLのリポジトリDBへの接続情報である Context path="/apiserver" タグ以降を追加
xml version="1.0" encoding="UTF-8"
:
(省略)
:
name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
path="/apiserver">
name="jdbc/APP_DB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
driverClassName="cdata.jdbc.mysql.MySQLDriver"
url="jdbc:cdata:mysql:User=xxxxx;Password=xxxxx;Database=apiserver;Server=xxxxx;Port=3306;"/>
name="jdbc/APP_USERS" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
driverClassName="cdata.jdbc.mysql.MySQLDriver"
url="jdbc:cdata:mysql:User=xxxxx;Password=xxxxx;Database=apiserver;Server=xxxxx;Port=3306;"/>
name="jdbc/APP_LOGS" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000"
driverClassName="cdata.jdbc.mysql.MySQLDriver"
url="jdbc:cdata:mysql:User=xxxxx;Password=xxxxx;Database=apiserver;Server=xxxxx;Port=3306;"/>
tomcat-users.xml
- userタグにroles="cdata_admin"のユーザを追加
xml version="1.0" encoding="UTF-8"
:
(省略)
:
name="admin" password="admin" roles="cdata_admin,rssbus_admin,admin-gui,manager-gui,
manager-status,manager-script,manager-jmx" />
Docker Build (Dockerイメージの作成)
- docker buildコマンド実行
- リポジトリ名:tomcat, タグ名:apiserverで作成
- 作成したDockerイメージの一覧を確認
~/Docker/APIServerJp $ docker build -t tomcat:apiserver .
Sending build context to Docker daemon 84.14MB
Step 1/4 : FROM tomcat:latest
latest: Pulling from library/tomcat
50e431f79093: Pull complete
dd8c6d374ea5: Pull complete
c85513200d84: Pull complete
55769680e827: Pull complete
e27ce2095ec2: Pull complete
5943eea6cb7c: Pull complete
3ed8ceae72a6: Pull complete
91d1e510d72b: Pull complete
415cc4506e71: Pull complete
a79d88064227: Pull complete
Digest: sha256:xxxxxxxxxxxxxxxx
Status: Downloaded newer image for tomcat:latest
---> a7fa4ac97be4
Step 2/4 : ADD ./apiserver.war /usr/local/tomcat/webapps
---> 08bfe96a9ab2
Step 3/4 : ADD ./tomcat-users.xml /usr/local/tomcat/conf
---> 6809256ee5bf
Step 4/4 : ADD ./server.xml /usr/local/tomcat/conf
---> 4767a0582095
Successfully built 4767a0582095
Successfully tagged tomcat:apiserver
~/Docker/APIServerJp $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat apiserver 4767a0582095 7 seconds ago 613MB
tomcat latest a7fa4ac97be4 3 days ago 528MB
~/Docker/APIServerJp $
(補足)既にDockerイメージが存在しており、既存のイメージを削除する方法
~/Docker/APIServerJp $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat apiserver 4767a0582095 8 minutes ago 613MB
tomcat latest a7fa4ac97be4 3 days ago 528MB
~/Docker/APIServerJp $ docker image rm 4767a0582095
Untagged: tomcat:apiserver
Deleted: sha256:xxxxxxxxxxxxxxxx
:
Deleted: sha256:xxxxxxxxxxxxxxxx
~/Docker/APIServerJp $ docker image rm a7fa4ac97be4
Untagged: tomcat:latest
Untagged: tomcat@sha256:xxxxxxxxxxxxxxxx
:
Deleted: sha256:xxxxxxxxxxxxxxxx
~/Docker/APIServerJp $
Docker Run (イメージからコンテナ起動)
~/Docker/APIServerJp $ docker run --rm -it -p 8080:8080 tomcat:apiserver
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/openjdk-8
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
21-Mar-2020 07:24:40.516 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/8.5.53
:
(省略)
:
21-Mar-2020 07:24:44.639 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
21-Mar-2020 07:24:46.174 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
21-Mar-2020 07:24:46.185 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 5561 ms
APIServerの管理コンソールにアクセス
ブラウザで以下のアドレスにアクセス
http://localhost:8080/apiserver/
(補足)ポートはDocker Run時の指定ポートを設定
以下の管理コンソールのログイン画面が表示されます。tomcat-users.xmlで指定したUser / Password でログインします。
ログインが成功するとステータスタブが表示されます。ライセンスが見つからない旨のエラーメッセージが表示されていますので、情報タブを開き、適切なライセンスでアクティベーションを行ってください。
リポジトリDB(MySQL)の確認
server.xmlで指定したMySQLのリポジトリDBをMySQLWorkBenchなどで開いてみます。app_xxxxテーブル群が作成されていることを確認します。CData APIServerの管理コンソールで作成したAPI定義情報やユーザ情報、さらにAPIユーザのアクセスログはこれらのテーブルに永続化されて保管されますので、Dockerを立ち上げ直しても前回の情報を保持したままご利用いただけます。
まとめ
いかがでしたでしょうか? CData APIServer をDockerコンテナで動かす最もシンプルな方法をご紹介しました。本記事では、実際のCData APIServerを使ってAPIを定義、定義したAPIへのアクセス方法はご紹介しておりません、これらの手順については定期的に開催しているハンズオンセミナーの資料がございますのでこちらの手順をご覧ください。
https://www.cdata.com/jp/blog/2019-10-11-112328
今回ご紹介した手順は、CData APIServerの30日間ご利用いただける無償評価版でもご利用いただけますので是非お試しください。
www.cdata.com
関連コンテンツ