ZooKeeper Docker로 설치하여 개발환경으로 구축하기
여기서는 ZooKeeper를 사용해보기 위해 docker를 사용하여 local 개발환경을 구성해 보도록 하겠다.
Docker 이미지
아래 도커 이미지를 이용해서 도커 환경에 ZooKeeper를 설치해 보도록 하겠다.
- ZooKeeper 공식 도커 이미지
- ZooKeeper Web 도커 이미지
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
로 입력하면 된다.
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