티스토리 뷰

현재 글은 윈도우에 도커, 도커 데스크탑이 설치되어있다고 생각하고 쓰는 글입니다.
도커가 없으신 분들은 도커를 먼저 설치해 주세요!

1. 작업할 디렉토리 생성

1. 윈도우에서 PowerShell을 관리자 권한으로 실행을 한 후, cd로 Desktop으로 이동 한 후, ElasticSearch 디렉토리를 하나 생성 한다. 나중에 마운트를 하여 이 디렉토리에 데이터를 싱크로나이즈 하기 위해서이기도 하다.

mkdir ElasticSearch

2. 윈도우에서 도커로 Elasticsearch,kibana 이미지 당겨오기

docker pull docker.elastic.co/elasticsearch/elasticsearch:8.7.0
docker pull docker.elastic.co/Kibana/Kibana:8.7.0

 

엘라스틱 서치와 키바나를 8.7.0으로 동일한 버전을 설치한다. 

 

3. 가상 네트워크 생성

docker network create --driver bridge ELK-network

docker network ls

 

드라이버는 bridge로! 가상 네트워크 이름은 ELK-network

 

docker network ls 로 생성이 잘 되었는지 확인해보자!

 

ELK-network로 잘 생성되었다.

 

4. 엘라스틱서치, 키바나 컨테이너 생성 및 실행

 

docker run --name devEs -v $pwd/data:/var/lib/elasticsearch --net ELK-network -p 9200:9200 -it docker.elastic.co/elasticsearch/elasticsearch:8.7.0

 

docker run --help를 하면 옵션에 대한 설명이 나오니 잘 읽어보면서 하면 된다.

기본적으로 --name : 컨테이너 이름, -v : 볼륨 마운팅 , --net : 가상 네트워크 할당, -p : 내/외부 포트 설정, -it : 상호 입출력 옵션, tty 활성화 (뒤에 이미지 이름)

으로 컨테이너에 올리니, 엘라스틱서치가 실행이되는데 그냥 exited 되어버렸다. 대략적으로 읽어보니 ERROR 로그에서 vm.max_map_count가 너무 낮다고한다.(이 메모리 맵이 대용량 데이터를 처리할 때 필요한건데 작다고 하니 올려줘야지~!! 도커가 윈도우 WSL로 돌아가니 환경은 리눅스! 명령어로 올려주면된다.)

wsl -d docker-desktop -u root
sysctl -w vm.max_map_count=262144

 

https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#_set_vm_max_map_count_to_at_least_262144

 

Install Elasticsearch with Docker | Elasticsearch Guide [8.11] | Elastic

The container runs Elasticsearch as user elasticsearch using uid:gid 1000:0. Bind mounted host directories and files must be accessible by this user, and the data and log directories must be writable by this user.

www.elastic.co

공식 문서를 보면서 해도 된다!

그런데 이는 일시적으로 맵 카운트를 올려주는 것이고, 영구적으로 올려주기위해서는(전체 환경에 영향)

vi 편집기로 /etc/sysctl.conf를 열어서 vm.max_map_count=262144를 추가해줘야한다.

엘라스틱서치 요구량이 최소 262144로 설정하는 것!! 나는 PowerShell를 사용하니까 wsl로 진입해서 명령어를 사용!

 

다시 실행하면 컨테이너가 잘 실행 될 것이다!

docker start devES(요게 컨테이너 이름)

 

docker desktop에서 본 컨테이너 devEs

컨테이너가 잘 실행되고 죽지 않는 것을 확인!!

 

다음으로는

키바나도 컨테이너를 올려보자!! 

이전에 이미지는 pull 당겨왔으니까!! 컨테이너만 올리면 된다. 대략적으로 엘라스틱서치와 컨테이너 생성하는 것은 99% 비슷하고, 포트랑 마운팅 하는 폴더만 바뀐다.

 

docker run --name devKibana -v $pwd/kibana:/var/lib/kibana --net ELK-network -p 15601:5601 -it docker.elastic.co/kibana/kibana:8.7.0

 

docker desktop의 kibana container

 

잘 돌아가는 것을 볼 수 있다.

 

 

와 같이 키바나가 실행되는데, localhost:15601로 접속하게 되면 enrollment token을 입력하는 화면이 나온다. 

엘라스틱서치쪽 실행되고 있는 쉘을 보면 아래와 같이 token이 생겼음을 알 수 있다.

토큰 및 패스워드는 최초 실행될 때만 출력되므로 잘 저장해두시길..

 

 

패스워드 초기화 및 재생성 그리고 kibana를 위한 enrollment token 을 재생성해야 한다???

 

 

엘라스틱 서치 패스워드 초기화

docker exec -it devEs /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

 

 

 

enrollment token 재생성

 

 

docker exec -it devEs /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

 

 

Es Enrollment token 재생성

 

 

 

 

그리고 입력하고 kibana에 떠있는 위 code= 뒤의  6자리의 code를 입력하게되면  

이렇게 로그인 화면으로 이동할 것이다.

 

 

아이디는 elastic 비밀번호는 처음에 토큰과 함께 나온 pwd를 입력하면된다. 

Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`) 와 같이 친절한 설명이 있으니, 따라가서 비밀번호 변경도 가능하다.

 

이렇게 뜨게되면, 엘라스틱과 연동된 키바나까지 볼 수 있다. 

나중에, Curl 명령어로 엘라스틱서치에 인덱스를 생성하고, json 타입으로 http request를 하여 도큐먼트까지 생성할 수 있는데 다음 시간에 다뤄볼 예정이다. 

엘라스틱서치는 Rest API로 HTTP 통신을 사용하여 데이터를 생성할 수 있다.  윈도우에서 도커를 사용하여 처음으로 설치하고 실행해보았는데 docker file을 활용하여 원팩 설치를 해도 재미있을 것 같다. 

 

오늘은 여기까지 그럼 안뇽!