Couchbase サービスの Docker 化

この例では Docker Compose を使い Couchbase サーバを起動し、 REST API を使えるように設定し、結果を確認します。

Couchbase はオープンソースです。そして、最近のウェブ、モバイル、IoT アプリケーション向けのドキュメント指向 NoSQL データベースです。簡単な開発とインターネットで性能をスケールできるように設計されています。

Couchbase サーバの起動

Couchbase Docker イメージは Docker Hub 上で公開されています。

Couchbase サーバは次のように起動します:

docker run -d --name db -p 8091-8093:8091-8093 -p 11210:11210 couchbase

各ポートを公開する理由は、 Couchbase Developer Portal - Network Configuration をご覧ください。

ログには次のように表示されます:

docker logs db
Starting Couchbase Server -- Web UI available at http://<ip>:8091

注釈

このページの例では、接続先の Docker ホストの IP アドレスは 192.168.99.100 を前提にしています。 192.168.88.100 は実際の Docker ホストの IP アドレスに置き換えてください。Docker Machine で Docker を実行している場合は、次のコマンドで IP アドレスを確認できます。

docker-machine ip <マシン名>

Couchbase コンソールには http://192.168.99.100:8091 でアクセスできます。デフォルトがユーザ名が Administrator 、パスワードが password です。

Couchbase Docker コンテナの設定

通常は Couchbase サーバを使う前にコンソール上での設定が必要です。これを REST API を使えば簡単に設定できます。

Data と Index サービスのメモリ設定

Couchbase インスタンス上では、Data ・ Query ・ Index は別々のサービスです。各サービスは別々の設定が必要です。例えば、Query は CPU の処理が集中するため、より速い CPU が必要です。 Index はディスクが重いため、速い SSD が必要です。Data は読み書きを速くするため、より多くのメモリが必要です。

メモリが必要になる設定は Data と Index サービスのみです。

curl -v -X POST http://192.168.99.100:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300
* Hostname was NOT found in DNS cache
*   Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
> POST /pools/default HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 36
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 36 out of 36 bytes
< HTTP/1.1 401 Unauthorized
< WWW-Authenticate: Basic realm="Couchbase Server Admin / REST"
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:48:16 GMT
< Content-Length: 0
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact

これは REST エンドポイント /pools/default に HTTP POST リクエストを送信した結果です。ホストとは Docker Machine の IP アドレスです。ポートは Couchbase サーバによって公開されているものです。サーバに対して、メモリとインデクスに対する制限(quota)をリクエストしています。

Data・Query・index サービスの設定

3つの全サービス、または、1つに対しての設定が可能です。これにより、それぞれのアフィニティ(ハードウェア要件等)、サービスを適切にセットアップします。例えば、Data サービスが開始できるのは、Docker ホストが SSD マシン上で動作している場所といった指定です。

curl -v http://192.168.99.100:8091/node/controller/setupServices -d 'services=kv%2Cn1ql%2Cindex'
* Hostname was NOT found in DNS cache
*   Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
> POST /node/controller/setupServices HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 26
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 26 out of 26 bytes
< HTTP/1.1 200 OK
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:49:51 GMT
< Content-Length: 0
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact

これは REST エンドポイント /node/controller/setupServices に HTTP POST リクエストを送信した結果です。コマンドの結果は、Couchbase サーバ用に3つのサービスが設定されています。 Data サービスは kv 、Query サービスは n1ql 、Index サービスは index なのが分かります。

Couchbase サーバの認証情報をセットアップ

あとで Couchbase サーバを管理するため、ユーザ名とパスワードの認証情報を設定します。

curl -v -X POST http://192.168.99.100:8091/settings/web -d port=8091 -d username=Administrator -d password=password
* Hostname was NOT found in DNS cache
*   Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
> POST /settings/web HTTP/1.1
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 50
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 50 out of 50 bytes
< HTTP/1.1 200 OK
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:50:43 GMT
< Content-Type: application/json
< Content-Length: 44
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact
{"newBaseUri":"http://192.168.99.100:8091/"}

これは REST エンドポイント /settings/web に HTTP POST リクエストを送信した結果です。ユーザ名とパスワードの認証情報がリクエスト中に含まれています。

サンプル・データのインストール

Couchbase サーバは couchbase インスタンス内で簡単にサンプル・データを読み込めます。

curl -v -u Administrator:password -X POST http://192.168.99.100:8091/sampleBuckets/install -d '["travel-sample"]'
* Hostname was NOT found in DNS cache
*   Trying 192.168.99.100...
* Connected to 192.168.99.100 (192.168.99.100) port 8091 (#0)
* Server auth using Basic with user 'Administrator'
> POST /sampleBuckets/install HTTP/1.1
> Authorization: Basic QWRtaW5pc3RyYXRvcjpwYXNzd29yZA==
> User-Agent: curl/7.37.1
> Host: 192.168.99.100:8091
> Accept: */*
> Content-Length: 17
> Content-Type: application/x-www-form-urlencoded
>
* upload completely sent off: 17 out of 17 bytes
< HTTP/1.1 202 Accepted
* Server Couchbase Server is not blacklisted
< Server: Couchbase Server
< Pragma: no-cache
< Date: Wed, 25 Nov 2015 22:51:51 GMT
< Content-Type: application/json
< Content-Length: 2
< Cache-Control: no-cache
<
* Connection #0 to host 192.168.99.100 left intact
[]

これは REST エンドポイント /sampleBuckets/install に HTTP POST リクエストを送信した結果です。サンプル・バケット名をリクエスト中に指定します。

おつかれさまでした。Couchbase コンテナの設定を、全て REST API を使って行いました。

CBQ を使って Couchbase に問い合わせ

CBQ は Couchbase への問い合わせを省略するコマンドライン・ツールです。これは Couchbase サーバに対して JSON ドキュメントの作成・読み込み・更新・削除が可能です。ツールは Couchbase Docker イメージに同梱されています。

CBQ ツールの実行:

docker run -it --link db:db couchbase cbq --engine http://db:8093
Couchbase query shell connected to http://db:8093/ . Type Ctrl-D to exit.
cbq>

--engine パラメータは、 CBQ に Docker ホスト上で動いている Couchbase サーバのホストとポートを指定します。ホストとは、通常、Couchbase サーバを実行しているホストの名前もしくは IP アドレスです。今回の例では、コンテナを起動時に指定したコンテナ名 db とポート 8093 が全てのクエリを受け付けます。

Couchbase には N1QL を使う JSON ドキュメントで問い合わせます。N1QL は包括的な宣言型クエリ言語であり、JSON ドキュメントに SQL のような機能を持たせます。

N1QL クエリを使ってデータベースに問い合わせます:

cbq> select * from `travel-sample` limit 1;
{
    "requestID": "97816771-3c25-4a1d-9ea8-eb6ad8a51919",
    "signature": {
        "*": "*"
    },
    "results": [
        {
            "travel-sample": {
                "callsign": "MILE-AIR",
                "country": "United States",
                "iata": "Q5",
                "icao": "MLA",
                "id": 10,
                "name": "40-Mile Air",
                "type": "airline"
            }
        }
    ],
    "status": "success",
    "metrics": {
        "elapsedTime": "60.872423ms",
        "executionTime": "60.792258ms",
        "resultCount": 1,
        "resultSize": 300
    }
}

Couchbase ウェブ・コンソール

Couchbase ウェブ・コンソール は Couchbase インスタンスを管理できるコンソールです。次の URL で表示します。

http://192.168.99.100:8091/

この IP アドレスの部分は Docker Machine の IP アドレスか、ローカルで動かしている場合は localhost です。

参考

Quickstart Docker Engine
https://docs.docker.com/engine/quickstart/