앞선 글에서 elastic search를 docker 로 사용하였고, kibana 또한 docker 로 사용할 것이라 세팅이 필요하다.
다른 두 컨테이너가 통신이 되어야 하는데 그렇기 위해서는 네트워크 연결이 필요하다.
[호스트 시스템] --- 포트 포워딩 ---> [Docker 컨테이너들]
Elasticsearch 포트
9200: application layer, 9300: network layer
Kibana 포트
5601: application layer
+------------------+
| 호스트 시스템 |
+------------------+
|
+------------------------+------------------------+
| | |
포트 9200/9300 포트 5601 |
| | |
+------------------v--+ +-----------v------------+ |
| | | | |
| Elasticsearch 컨테이너|◄------►| Kibana 컨테이너 | |
| | | | |
+---------------------+ +------------------------+ |
^ ^ |
| | |
+------------------------------+---------------------------+
|
+----------------+
| Docker 네트워크 |
| (elastic-net) |
+----------------+
먼저 docker 네트워크를 생성한다.
# 네트워크 생성
docker network create elastic-net
# 네트워크 리스트
docker network ls
# 잘못 만들었다면 사용하지 않는 네트워크 정리
docker network prune
기존 Elasticsearch 컨테이너를 중지하고 네트워크에 연결하여 다시 시작한다.
docker stop your-elasticsearch-container
# elastic container가 없다면
docker run -d \
--name elasticsearch \
--net elastic-net \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=true" \
-e "ELASTIC_PASSWORD=elastic" \
docker.elastic.co/elasticsearch/elasticsearch:8.12.2
# elastic container가 이미 있다면
docker network connect elastic-net elasticsearch
현재 네트워크가 잘 연결 되었는지 확인한다.
% docker inspect -f '{{range $key, $value := .NetworkSettings.Networks}}{{$key}} {{end}}' elasticsearch
bridge elastic-net
이제 kibana 컨테이너를 같은 네트워크에 연결하여 생성한다. elasticsearch 8.0 부터는 superuser 계정을 직접 사용할 수 없다. elastic search 에서 tocken을 만들고, 그 토큰을 kibana 에서 사용할 것이다. 토큰을 문을 여는 열쇠같이 사용한다. 그렇기에 토큰을 잘 보관해놓아야 한다.
kibana 또한 독립적인 컨테이너이기에 같은 네트워크 안에 놓아야 elastic search 와 통신이 가능하다.
docker run -d \
--name kibana \
--net elastic-net \
-p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=https://elasticsearch:9200" \
-e "ELASTICSEARCH_SERVICEACCOUNTTOKEN=<token_>" \
-e "ELASTICSEARCH_SSL_VERIFICATIONMODE=none" \
docker.elastic.co/kibana/kibana:8.12.2
% docker exec elasticsearch /bin/bash -c "bin/elasticsearch-service-tokens create elastic/kibana kibana-token"
SERVICE_TOKEN elastic/kibana/kibana-token = [token]
kibana 도 위와 마찬가지로 network 연결을 확인하면 좋다.
잘 되었다면 browser 에 http://localhost:5601/app/home#/ 를 치고 로그인하면 된다.
-link 옵션 사용하지 마세요.
-link 는 명시적으로 컨테이너 간 링크를 정의하는 것이다. 컨테이너 시작 순서에 의존성이 생길 뿐더러 스케일링에 제한이 있다. 반면, docker network 는 내장 dns 를 사용하여 컨테이너 이름으로 서로 찾을 수 있다. 컨테이너들끼리 서로의 존재를 알 수 있기에 독립적으로 시작/ 중지가 가능하고 그렇기에 확장성이 좋고 더 유연하다.
'ELK' 카테고리의 다른 글
[ElasticSearch] bucket aggregation (0) | 2025.03.29 |
---|---|
[ElasticSearch] metric aggregation (0) | 2025.03.29 |
[ElasticSearch] search (0) | 2025.03.23 |
[ElasticSearch] mapping (0) | 2025.03.23 |
[ElasticSearch] 데이터 입력, 조회, 수정, 삭제 (0) | 2025.03.23 |