ZooKeeper@Dockerにローカルから接続

表題の通り。

■ 環境

  • Apache ZooKeeper 3.4.9
  • Docker for Mac 1.12.1
  • Mac OSX El Capitan

■ ZooKeeper

先日あげたシングルノードのZooKeeperは、`zkCli`で接続する為にもコンテナを起動させる必要があった。今回はローカルで起動しているのと同じように、ローカルの`zkCli`でアクセスできるように設定を変えて起動してみる。

$ docker run -d --name zk -p 2181:2181 zookeeper

これで起動した。ちなみにどのポートを開いているか(?)は下記コマンドで取得できるようである。

$ docker port zk
2181/tcp -> 0.0.0.0:2181
$

ではローカルの`zkCli`で接続してみる。

$ zkCli
Connecting to localhost:2181
Welcome to ZooKeeper!
JLine support is enabled
[zk: localhost:2181(CONNECTING) 0]
WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1]

接続できた。ということは4文字コマンドもいけるはずだ。

$ echo srvr | nc localhost 2181
Zookeeper version: 3.4.9-1757313, built on 08/23/2016 06:50 GMT
Latency min/avg/max: 0/33/162
Received: 6
Sent: 5
Connections: 1
Outstanding: 0
Zxid: 0x1
Mode: standalone
Node count: 4
$

楽しい。

以上。

■ 関連

ZooKeeper@Docker – シングルノード

表題の環境を試す。

■ 環境

  • ZooKeeper 3.4.9
  • Docker for Mac 1.12.1
  • Mac OSX ElCapitan

■ run

ZooKeeperをとりあえずシングルノードで稼働させてみる。

$ docker run -d --name zk zookeeper
9d2f562d9475d830fb4e844dcff69e338c7fc450666919ffb6e50f4de22c561f
$

アクセスするには`zkCli`用のコンテナを起動する。

$ docker run -ti --rm --link zk:zk zookeeper zkCli.sh -server zk
Connecting to zk
2016-10-04 19:25:37,817 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.9-1757313, built on 08/23/2016 06:50 GMT
2016-10-04 19:25:37,820 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=9ed51322280c
2016-10-04 19:25:37,820 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_92-internal
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/lib/jvm/java-1.8-openjdk/jre
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/zookeeper-3.4.9/bin/../build/classes:/zookeeper-3.4.9/bin/../build/lib/*.jar:/zookeeper-3.4.9/bin/../lib/slf4j-log4j12-1.6.1.jar:/zookeeper-3.4.9/bin/../lib/slf4j-api-1.6.1.jar:/zookeeper-3.4.9/bin/../lib/netty-3.10.5.Final.jar:/zookeeper-3.4.9/bin/../lib/log4j-1.2.16.jar:/zookeeper-3.4.9/bin/../lib/jline-0.9.94.jar:/zookeeper-3.4.9/bin/../zookeeper-3.4.9.jar:/zookeeper-3.4.9/bin/../src/java/lib/*.jar:/conf:
2016-10-04 19:25:37,822 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64/server:/usr/lib/jvm/java-1.8-openjdk/jre/lib/amd64:/usr/lib/jvm/java-1.8-openjdk/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2016-10-04 19:25:37,823 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=4.4.20-moby
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2016-10-04 19:25:37,824 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/zookeeper-3.4.9
2016-10-04 19:25:37,825 [myid:] - INFO  [main:ZooKeeper@438] - Initiating client connection, connectString=zk sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@3eb07fd3
2016-10-04 19:25:37,845 [myid:] - INFO  [main-SendThread(zk:2181):ClientCnxn$SendThread@1032] - Opening socket connection to server zk/172.17.0.2:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2016-10-04 19:25:37,915 [myid:] - INFO  [main-SendThread(zk:2181):ClientCnxn$SendThread@876] - Socket connection established to zk/172.17.0.2:2181, initiating session
2016-10-04 19:25:37,958 [myid:] - INFO  [main-SendThread(zk:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server zk/172.17.0.2:2181, sessionid = 0x1578ab473ab0001, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: zk(CONNECTED) 0]

なるほど。

先日”latest“のタグでDockerコンテナを`pull`しているが、現状の最新版である”3.4.9“で動いている様子。JavaはOpenJDKの1.8であるようだ。

以上。

■ 関連

ZooKeeperの公式Dockerコンテナ

表題の通り。

■ 環境

  • ZooKeeper 3.4.9
  • Docker for Mac 1.12.1
  • Mac OSX El Capitan

■ ZooKeeper

何気なく下記コマンドを実行したところ、”OFFICIAL“なコンテナがあった。以前はなかったような気がするのだが作成されたようである。

$ docker search zookeeper
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
jplock/zookeeper              Builds a docker image for Zookeeper versio...   147                  [OK]
mesoscloud/zookeeper          ZooKeeper                                       63                   [OK]
zookeeper                     Apache ZooKeeper is an open-source server ...   14        [OK]
digitalwonderland/zookeeper   Latest Zookeeper - clusterable                  9                    [OK]
  :
$

OFFICIAL“であるのは心強い。

https://hub.docker.com/_/zookeeper/

なかなか面白そうである。時間を作ってDockerfileもちゃんと確認してみたいと思う。

以上。

■ 関連

ベースとなるコンテナをalipneに変更

Dockerにおいて表題の通り。

■ 環境

  • Docker 1.11.1

■ きっかけ

今までは慣れたCentOSにしていたのだが、コンテナにログインして作業をする機会もほとんどないので軽量だと噂のalpineに変更してみることにする。今回作業をするのは下記ZooKeeperのコンテナである。

ZooKeeperの独自Dockerfileを作成

■ Dockerfile

更新後のDockerfileは下記のようになった。

FROM alpine
MAINTAINER withsin <withsin@gmail.com>

ENV ZOO_VERSION=3.4.8

RUN apk --no-cache add openjdk8-jre bash
RUN mkdir /opt \
    && wget -O - http://archive.apache.org/dist/zookeeper/zookeeper-${ZOO_VERSION}/zookeeper-${ZOO_VERSION}.tar.gz | tar zx -C /opt \
    && ln -s /opt/zookeeper-${ZOO_VERSION} /opt/zookeeper \
    && mkdir /opt/zookeeper/data \
    && chown -R root:root /opt/zookeeper-${ZOO_VERSION} \
    && mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg

EXPOSE 2181 2888 3888

CMD ["/opt/zookeeper/bin/zkServer.sh", "start-foreground"]

変更点は下記の通り。

  1. ベースのコンテナをalpineに変更
  2. `yum install`を`apk add`に
  3. ZooKeeperの各種スクリプトでbashが使用されているのでインストール
  4. ZooKeeperのインストール前に/optを作成(alpineでは存在しなかったので)
  5. curlコマンドは存在しなかったのでwgetで代用
  6. `yum clean all`に該当する`apk cache clean`は、インストール時に`–no-cache`とすることで不要

■ build

ビルドした結果は下記の通り。

$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
withsin/zookeeper       3.4.8-alpine        cb316b792c95        About an hour ago   154.9 MB
withsin/zookeeper       latest              cb316b792c95        About an hour ago   154.9 MB
  :
alpine                  latest              d7a513a663c1        4 weeks ago         4.798 MB
  :
withsin/zookeeper       3.4.8               3d8bc0053ba6        9 weeks ago         497.5 MB
  :
$

alpineがそもそも5Mもないのだが、JREを入れたせいか155M程度まで膨れ上がった。しかし、以前のCentOS時の500Mに比べると3分の1以下になっていることが分かる。今後はalpineをベースのコンテナとして採用することにする。

以上。

■ 関連

ZooKeeper-3.4.8 Docker Container

Apache ZooKeeperにおいて表題の通り。2016/02/20にZooKeeper 3.4.8がリリースされたので、以前作成したDockerの”Automated Build“のDockerfileを修正する。

■ 環境

  • Apache ZooKeeper 3.4.8
  • Docker 1.10.1

■ 3.4.7

以前作成した時は”3.4.7“のリリース直後であったが、その後”3.4.7“にバグが見つかりこのversionは切り戻された。しかしそのまま残しておいたので今回は”3.4.8“にupdateする。

DockerHub AutomatedBuild

■ Dockerfile

以前のDockerfileから少し変更し下記のようにした。

FROM centos:7
MAINTAINER withsin <withsin@gmail.com>

ENV ZOO_VERSION=3.4.8

RUN yum update -y
RUN yum install -y java-1.8.0-openjdk
RUN curl http://archive.apache.org/dist/zookeeper/zookeeper-${ZOO_VERSION}/zookeeper-${ZOO_VERSION}.tar.gz | tar zx -C /opt
RUN ln -s /opt/zookeeper-${ZOO_VERSION} /opt/zookeeper
RUN mkdir /opt/zookeeper/data
RUN chown -R root:root /opt/zookeeper-${ZOO_VERSION}
RUN mv /opt/zookeeper/conf/zoo_sample.cfg /opt/zookeeper/conf/zoo.cfg
RUN yum clean all

EXPOSE 2181 2888 3888

CMD ["/opt/zookeeper/bin/zkServer.sh", "start-foreground"]

ZooKeeperのversionを1箇所に変更。かつ今回の”3.4.8“にしている。

一度、ローカルでDockerfileに問題ないか確認。

$ docker build -t withsin/zookeeper:3.4.8 .

buildに問題がなさそうであったので、gitにcommitしてGitHubにpushしてある。これで前回のエントリの通り”Automated Build“でコンテナも作成さえるはずである。

以上。

■ 関連