ZooKeeperをDockerでインストールして開発環境を構築する

ここではZooKeeperを試すために、dockerを使ってlocal開発環境を構成する。

Dockerイメージ

以下のDockerイメージを利用して、Docker環境にZooKeeperをインストールする。

Dockerの設定と実行

作業ディレクトリの作成

適切な場所に作業ディレクトリを作成する。

% mkdir zookeeper
% cd zookeeper

docker-composeを作成する

docker-compose.ymlを作成し、次の内容を書く。

version: '3.1'
services:
  zookeeper:
    container_name: zookeeper-server
    image: zookeeper
    ports:
      - 2181:2181

docker-composeの実行

ymlファイルを書き終えたら、次のコマンドで実行する。

docker-compose -f docker-compose.yml up -d

dockerコンテナの実行確認

上記のコマンドを実行すると、KafkaとZookeeperの2台が実行されていることを確認できる。

docker ps -a
% docker ps -a
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                   PORTS                                                  NAMES
6f95cc0e6a9a   zookeeper                  "/docker-entrypoint.…"   17 seconds ago   Up 16 seconds            2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zookeeper

web-consoleのインストール

使いやすくするためにweb-consoleをインストールする。

先ほど作成したymlファイルにZK-WebコンソールのDocker設定を追加する。

version: '3.7'
services:
  zookeeper:
    container_name: zookeeper-server
    image: zookeeper
    ports:
      - 2181:2181
  zk-web:
    container_name: zk-web-server
    image: goodguide/zk-web
    ports:
      - 8080:8080
    environment:
      - ZKWEB_PORT=8080                 # Web Port
      - ZKWEB_CREDENTIALS=admin:hello   # Adminアカウント:パスワード
      - ZKWEB_DEFAULT_NODE=localhost:2181/default-node

networks:
  promnet:
    driver: bridge

既存のdocker-composeをrmコマンドで削除し、再びupで実行する。

% docker-compose stop
% docker-compose rm
% docker-compose -f docker-compose.yml up -d

正しくインストールできていれば、localhost:8080でzk-webにアクセスできる。

web-consoleでznodeを確認する

まずZooKeeperサーバーのアドレスを確認する。

コンテナIDをpsコマンドで確認する。

% docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS        PORTS                                                  NAMES
fdf840485d3d   zookeeper              "/docker-entrypoint.…"   2 seconds ago   Up 1 second   2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, 8080/tcp   zookeeper
5e55c24e6186   noteax/zk-web-docker   "/docker-entrypoint.…"   2 seconds ago   Up 1 second   0.0.0.0:8080->8080/tcp                                 zk_web

確認したIDを次のように入力し、inspectコマンドを実行する。

docker inspect ${CONTAINER ID}

inspectコマンドで、コンテナのGateway IPをNetworkSettings > Networks > Gatewayから確認する。

% docker inspect fdf840485d3d
[
        ...
        "NetworkSettings": {
            ...
            "Networks": {
                "zookeeper_default": {
                    ...
                    "Gateway": "172.20.0.1",
                    ...
                }
            }
        }
        ...
]

上記ではGateway IPは172.20.0.1である。

ZK-Webに移動し、下の入力欄に{Gateway IP}:2181を入力する。上記の例では172.20.0.1:2181と入力すればよい。

ZK-Web

loginボタンをクリックし、先ほど設定したadminアカウントで接続すると、作成、修正、削除ができる。

Cluster構成

次のように設定すると、Cluster構成を簡単に作成できる。

version: '3.7'
services:
  zk1:
    image: zookeeper
    hostname: zk1
    ports:
      - 2181:2181
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
    restart: always
  zk2:
    image: zookeeper
    hostname: zk2
    ports:
      - 2182:2181
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
    restart: always
  zk3:
    image: zookeeper
    hostname: zk3
    ports:
      - 2183:2181
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181
    restart: always

  zk-web:
    container_name: zk_web
    image: noteax/zk-web-docker
    ports:
      - 8080:8080
    environment:
      - ZKWEB_PORT=8080                # Web Port
      - ZKWEB_CREDENTIALS=admin:hello  # Adminアカウント:パスワード
      - ZKWEB_DEFAULT_NODE=localhost:2181/default-node
    restart: always