Kafka 1.0.0

少し前に表題がリリースされたというニュースを見た。試してみたいがしばらく触ってないし…と思いとりあえず情報を集めるだけ。

■ 環境

  • Apache Kafka 1.0.0
  • Mac OSX El Capitan

■ Apache Kafka

Apache Kafka
http://kafka.apache.org/

2017/11/01“にリリースされているようだ。

Homebrewではまだインストールできない。

$ brew info kafka
kafka: stable 0.11.0.1 (bottled)
Publish-subscribe messaging rethought as a distributed commit log
https://kafka.apache.org
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/kafka.rb
==> Dependencies
Required: zookeeper ✔
==> Requirements
Required: java = 1.8 ✔
==> Caveats
To have launchd start kafka now and restart at login:
  brew services start kafka
Or, if you don't want/need a background service you can just run:
  zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties & kafka-server-start /usr/local/etc/kafka/server.properties
$

Homebrewではまだ”0.11.0.1“のようである。

公式のDockerコンテナは存在しないが、Starが一番付いていて有名(?)な下記コンテナはすでに”1.0.0“のタグが付いていたので対応しているだろう。

wurstmeister/kafka

latest“が”1.0.0“に付いているのだが、versionがわからなくなるのでいつも下記のように落としている。

$ docker pull wurstmeister/kafka:1.0.0

少し時間ができたら触りたい。

以上。

Vespa quick start

表題の通り。少し前から気になっている”Vespa“を触り始めてみたい。

■ 環境

  • Docker 17.09.0-ce
  • Mac OSX El Capitan

■ Vespa

Vespa. Big data. Real time.
http://vespa.ai/

とりあえず手始めに下記を順にやっていってみる。

Vespa quick start using Docker
http://docs.vespa.ai/documentation/vespa-quick-start.html

Prerequisites“は問題なさそう。

1. Clone the Vespa sample apps from github

$ git clone https://github.com/vespa-engine/sample-apps.git
$ export VESPA_SAMPLE_APPS=`pwd`/sample-apps
$

Sampleアプリケーションを落として環境変数に入れる。

2. Start a Vespa Docker container

Dockerコンテナを起動する。volumeは先ほど環境変数に入れたSampleアプリケーションの場所を指定している。

$ docker run --detach --name vespa --hostname vespa-container --privileged \
--volume $VESPA_SAMPLE_APPS:/vespa-sample-apps --publish 8080:8080 vespaengine/vespa

vespaengine/vespa“というコンテナイメージはローカルにはないので、初めての時はダウンロードから開始。

やっている内容については、詳しくは”Dockerfile“とスクリプトを見ろよ、と。

3. Wait for configuration server to start – wait for a 200 OK response

コンテナの起動状態を確認する。

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
f72ec6bbe78b        vespaengine/vespa   "/usr/local/bin/st..."   33 seconds ago      Up 32 seconds       0.0.0.0:8080->8080/tcp   vespa
$

このコンテナに対してコマンドを実行するようだ。

$ docker exec vespa bash -c 'curl -s --head http://localhost:19071/ApplicationStatus'
HTTP/1.1 200 OK
Date: Thu, 02 Nov 2017 10:11:19 GMT
Content-Type: application/json
Content-Length: 8478

$

4. Deploy and activate a sample application

Sampleアプリケーションのdeployのようである。`vespa-deploy`コマンドがあるんだな。”prepare“(作成)して”activate“(有効化)といったところか。

$ docker exec vespa bash -c '/opt/vespa/bin/vespa-deploy prepare /vespa-sample-apps/basic-search/src/main/application/ && \
/opt/vespa/bin/vespa-deploy activate'
Uploading application '/vespa-sample-apps/basic-search/src/main/application/' using http://localhost:19071/application/v2/tenant/default/session?name=application
Session 2 for tenant 'default' created.
Preparing session 2 using http://localhost:19071/application/v2/tenant/default/session/2/prepared
Session 2 for tenant 'default' prepared.
Activating session 2 using http://localhost:19071/application/v2/tenant/default/session/2/active
Session 2 for tenant 'default' activated.
Checksum:   7e2d87f846179be18c806d7e1f1aeea6
Timestamp:  1509606901569
Generation: 2
$

5. Ensure the application is active – wait for a 200 OK response

Sampleアプリケーションの状態。これはDockerの外部から実行するようだ。公開したようなイメージだろうか。

$ curl -s --head http://localhost:8080/ApplicationStatus
HTTP/1.1 200 OK
Date: Thu, 02 Nov 2017 10:17:00 GMT
Content-Type: application/json
Transfer-Encoding: chunked

$

200 OK“が返ってきているので問題なさそうだ。

6. Feed documents

ドキュメントを投入する、というようなイメージだろうか。POSTしてるし。

$ curl -s -X POST --data-binary @${VESPA_SAMPLE_APPS}/basic-search/music-data-1.json \
    http://localhost:8080/document/v1/music/music/docid/1 | python -m json.tool
{
    "id": "id:music:music::1",
    "pathId": "/document/v1/music/music/docid/1"
}
$ curl -s -X POST --data-binary @${VESPA_SAMPLE_APPS}/basic-search/music-data-2.json \
    http://localhost:8080/document/v1/music/music/docid/2 | python -m json.tool
{
    "id": "id:music:music::2",
    "pathId": "/document/v1/music/music/docid/2"
}
$

7. Run a query and a document get request

投入したドキュメントに対してクエリの実行と取得。

$ curl -s http://localhost:8080/search/?query=bad | python -m json.tool
{
    "root": {
        "children": [
            {
                "fields": {
                    "artist": "Michael Jackson",
                    "documentid": "id:music:music::1",
                    "duration": 247,
                    "sddocname": "music",
                    "title": "Bad",
                    "year": 1987
                },
                "id": "id:music:music::1",
                "relevance": 0.254574922399675,
                "source": "music"
            },
            {
                "fields": {
                    "artist": "Eminem",
                    "documentid": "id:music:music::2",
                    "sddocname": "music",
                    "title": "So Bad",
                    "year": 2010
                },
                "id": "id:music:music::2",
                "relevance": 0.05447959677335429,
                "source": "music"
            }
        ],
        "coverage": {
            "coverage": 100,
            "documents": 2,
            "full": true,
            "nodes": 0,
            "results": 1,
            "resultsFull": 1
        },
        "fields": {
            "totalCount": 2
        },
        "id": "toplevel",
        "relevance": 1.0
    }
}
$

bad“という文字列を含むドキュメントの取得、といったところだろうか。

`python -m json.tool`は長いので`jq .`にしてみた。

$ curl -s http://localhost:8080/document/v1/music/music/docid/2 |  jq .
{
  "fields": {
    "artist": "Eminem",
    "title": "So Bad",
    "year": 2010,
    "album": "Recovery"
  },
  "id": "id:music:music::2",
  "pathId": "/document/v1/music/music/docid/2"
}
$

こっちはドキュメント自体の取得か。

■ おしまい

ここまでだけだと「ふーん」というだけの結果であるが、”big data serving engine“というものがどういうものかまだイメージがしっかりついていないので、Sampleアプリケーション等もうちょっとしっかり見ていこうかと思う。

以上。

Owasp ZAP@Docker

表題の件について。Dockerコンテナイメージがあるようなので使ってみたい。

■ 環境

  • Docker for Mac
  • Mac OSX El Capitan

■ Owasp ZAP

Docker – zaproxy/zaproxy Wiki
https://github.com/zaproxy/zaproxy/wiki/Docker

コンテナの取得。

$ docker pull owasp/zap2docker-stable

コンテナがかなり大きい。ちなみにサイズは下記であった。

$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
owasp/zap2docker-stable   latest              12c3b9347b07        5 months ago        1.33GB
$

WebSwing – zaproxy/zaproxy Wiki
https://github.com/zaproxy/zaproxy/wiki/WebSwing

上記を参考にコンテナを起動する。

$ docker run -u zap -p 8080:8080 -p 8090:8090 -i owasp/zap2docker-stable zap-webswing.sh

前述のURLに記載されている通り、ブラウザで下記にアクセスすると画面が表示された。

http://localhost:8080/?anonym=true&app=ZAP

これを使って脆弱性診断をしてみるとする。

ちなみに起動している間のコンテナイメージはさらに大きいようだ。

$ docker ps -a -s
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                       PORTS                                            NAMES               SIZE
5f4feb2057aa        owasp/zap2docker-stable   "zap-webswing.sh"   2 minutes ago       Up 2 minutes                 0.0.0.0:8080->8080/tcp, 0.0.0.0:8090->8090/tcp   cocky_bose          73.8MB (virtual 1.4GB)
  :
$

以上。

■ 関連

Dockerコンテナサイズ

Dockerコンテナサイズ

表題の件について。久しぶりにDockerを少し触っていて、使いたいコンテナを`pull`しているのだがサイズが大きいのか時間がかかる。そういえばコンテナのサイズってどこかに載ってたっけ?と思ったのでメモ。

■ 環境

  • Docker for Mac
  • Mac OSX El Capitan

■ docker images

単純に下記コマンドで表示される情報に含まれていた。

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
bkimminich/juice-shop   latest              e0a3fe792015        13 days ago         316MB
httpd                   latest              e74fcb59d25b        6 weeks ago         177MB
zookeeper               3.4.10              19604ac4a163        5 months ago        143MB
zookeeper               latest              19604ac4a163        5 months ago        143MB
mysql                   latest              22be5748ecbe        6 months ago        406MB
php                     latest              9364fb774af9        6 months ago        369MB
elasticsearch           latest              bca6fa4a7062        7 months ago        353MB
$

また、実行中のコンテナもサイズを取得できるようであった。

$ docker ps -a -s
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                    PORTS                    NAMES               SIZE
bd625fc65344        bkimminich/juice-shop   "npm start"         12 days ago         Exited (255) 9 days ago   0.0.0.0:3000->3000/tcp   juice               103kB (virtual 316MB)
$

上記はすでに停止させているコンテナであるが、サイズが取得できている。

以上。

httpd@Dockerの起動方法

表題の件について。過去2回ほど同じネタをあげているのだが、その時のメモを見て同じ方法で起動しようとしたが、起動できなかったのでメモしておく。

■ 環境

  • httpd 2.4.27
  • Docker for Mac
  • Mac OSX El Capitan

■ httpd

コンテナは下記で取得した。

$ docker pull httpd

以前のエントリの通り下記で起動しようとしたのだが、起動できずに落ちてしまう。

$ docker run -ti --rm --name httpd -p 10080:80 httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Aug 22 10:14:51.095259 2017] [mpm_event:notice] [pid 1:tid 139888904910720] AH00489: Apache/2.4.27 (Unix) configured -- resuming normal operations
[Tue Aug 22 10:14:51.095353 2017] [core:notice] [pid 1:tid 139888904910720] AH00094: Command line: 'httpd -D FOREGROUND'
[Tue Aug 22 10:14:51.221791 2017] [mpm_event:notice] [pid 1:tid 139888904910720] AH00492: caught SIGWINCH, shutting down gracefully
$

さてどうしたものかと探してみると、過去のISSUEがあったので参考にしてみた。

とりあえず”-d“を付けて起動してみることにした。

$ docker run -dti --rm --name httpd -p 10080:80 httpd
be3eaf245ecb080b3d3ed30fe5b61f582c6d693b82bfd31d4051f24210a06e08
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS              PORTS                   NAMES
be3eaf245ecb        httpd               "httpd-foreground"   4 seconds ago       Up 2 seconds        0.0.0.0:10080->80/tcp   httpd
$

起動してくれた。ログも確認してみる。

$ docker logs httpd
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[Tue Aug 22 10:26:58.420633 2017] [mpm_event:notice] [pid 1:tid 139631637636992] AH00489: Apache/2.4.27 (Unix) configured -- resuming normal operations
[Tue Aug 22 10:26:58.420751 2017] [core:notice] [pid 1:tid 139631637636992] AH00094: Command line: 'httpd -D FOREGROUND'
$

さて、しばらく触っていない間にどんな変更があったのであろう。とりあえず検証環境として使いたいだけだったので詳細はまた別途調べてみることにする。

-d“の時に”–rm“も以前は使えなかったような気がするのだが、それも気になるし。

以上。

■ 関連

ApacheHttpd@Docker

httpd@Docker