各製品の資料を入手。
詳細はこちら →CData APIServer をDocker 上で動かす最もシンプルな方法
はじめに
CData 技術ディレクター桑島です。Dockerコンテナ上でCData API Server を使いたい というお問い合わせを沢山いただきます。そこで、CData APIServer をDockerコンテナで動かす最もシンプルな方法をご紹介します。
構成
Docker環境
今回は、macOS上にDocker環境を作成します。Docker Desktop on masOSをインストールします。
Java Application Server(Tomcat)
CData APIServerを動作させるWeb Application Serverは、Docker Hub オフィシャルイメージ内の最新(Latest)のApache Tomcatを利用します。
CData APIServer
CData API Serverは、Windows(.NET Edition)とCrossPlatform(Java Edition)があります。本シナリオではCrossPlatform(Java Edition)を利用します。CData APIServerは下記ページからダウンロードできます。
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"?> : (省略) : <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/apiserver"> <Resource 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;"/> <Resource 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;"/> <Resource 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;"/> </Context> </Host> </Engine> </Service> </Server>
tomcat-users.xml
- userタグにroles="cdata_admin"のユーザを追加
<?xml version="1.0" encoding="UTF-8"?> : (省略) : <user name="admin" password="admin" roles="cdata_admin,rssbus_admin,admin-gui,manager-gui, manager-status,manager-script,manager-jmx" /> </tomcat-users>
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 (イメージからコンテナ起動)
- ポート:8080で起動
~/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日間ご利用いただける無償評価版でもご利用いただけますので是非お試しください。