엘라스틱 서치 -> es
kibana -> 키바나
라고 정의하겠다.
일단 es와 키바나를 설치하여보자.
일단 설치 환경은
나는 윈도우환경이고
개발은 인텔리제이에서 스프링부트 3.3.4를 이용하고있다.

Elastic Search Engine의 Sprign Client인 spring-data-elasticsearch를 사용했다.
implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
implementation 'co.elastic.clients:elasticsearch-java:8.10.2'
미리고백하자면 사실, 의존성 문제가 엄청 터졌다. 내가 보고 따라했던 블로그는 3.0.x 버전의 스프링을 사용하고 있었는데 나는 3.3.x의 스프링을 사용해서라고 지금은 추측한다 (괜찮을 줄 알았다. ㅎ)
아무튼, 방법은 비슷하니 후에 버전을 조심하도록...

버전확인을 꼭하자 (원본블로그글에서도 조심하라고 일렀지만 나는 무지성으로 따라해서 후에 애를 많이 먹었다...그 후기는 다른 글에 풀어보도록 하겠다!)
docker-compose.yml
version: '3.7'
services:
es:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.3
container_name: es
environment:
- node.name=es-node
- cluster.name=search-cluster
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.http.ssl.enabled=false
- xpack.security.transport.ssl.enabled=false
ports:
- 9200:9200 # https
- 9300:9300 #tcp
networks:
- es-bridge
kibana:
image: docker.elastic.co/kibana/kibana:8.5.3
container_name: kibana
environment:
SERVER_NAME: kibana
ELASTICSEARCH_HOSTS: http://es:9200
ports:
- 5601:5601
# Elasticsearch Start Dependency
depends_on:
- es
networks:
- es-bridge
networks:
es-bridge:
driver: bridge
docker-compose.yml file으로 일관된 환경을 구현할 수 있었다!
image : docker에서 제공하는 elastic stack의 image를 넣어주면 되는데 : 뒤에 version을 적어주고 우리가 사용하는 elastic search client와 맞춰준다.
container_name : 말그대로 image를 띄우면 container가 생성되는데 이때 container의 이름을 의미한다.
environment : environment는 환경변수를 전달해줘야할때 사용한다.
- elastic search : local에서 돌릴 것이기에 security는 false로 설정해준다.
security설정을 따로 하지 않는이상 해당 환경변수 설정이 없다면 돌아가지 않는다.
그리고 돌리다보면 memory exception이 발생할 수 있는데 - ES_JAVA_OPTS=-Xms512m -Xmx512m #ERROR: Elasticsearch exited unexpectedly 대안 -> memory size up 해당 줄을 environment에 추가하면 메모리를 늘릴 수 있다.- kibana : kibana는 어떤 elastic search와 연결할것인지 host를 정해줘야한다.
이때 우리는 container가 서로 연결이 되어있기에 es container를 사용한다. 따라서 http://es:9200으로 해줘야한다. 만약에 elastic search의 image name을 es로 설정하지 않았고 elasticsearch라고 했다면? http:elasticsearch:9200이 될 것이다.
ports
- elastic search
docker container에서 허용할 port number를 적어줘야하는데 elasitc search는 node끼리의 통신을 하는데 이때 tcp(9300 port)를 사용하고 client와 node의 통신을 위해 http(9200 port)를 사용하게 된다.- kibana
kibana는 5601 port를 사용하게 된다.
network
container들 사이의 network를 연결해줘야한다. 이때 bridge를 es-bridge라는 이름을 가지도록 만들어주고 두개의 container에 각각 등록하면 된다. 이때 kibana는 elastic search가 먼저 띄워져야 작동하게끔 의존관계를 명시해야해서 depends_on:es을 사용한다.
1-3. 실행
compose 파일이 있는 곳에서 powershell을 열었다!
그다음 명령어를 입력해준다
docker compose up -d
docker ps를 입력하면 실행중인 container를 확인할 수 있다.

docker - desktop에서 확인하면 이렇게 보인다!