ZooKeeper Docker로 설치하여 개발환경으로 구축하기

여기서는 ZooKeeper를 사용해보기 위해 docker를 사용하여 local 개발환경을 구성해 보도록 하겠다.

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 두대가 실행되고 있는 것을 확인할 수 있다.

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 콘솔 도커를 추가한다.

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



최종 수정 : 2023-04-15