docker --version
docker-compose --version
설치가 필요하다면 Docker 공식 문서에서 설치 가이드를 참고하세요.
아래 docker-compose.yml 예제는 3개의 Elasticsearch 노드와 1개의 Kibana를 포함합니다.
version: '3'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: es01
environment:
- node.name=es01
- cluster.name=elasticsearch-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- "9200:9200"
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: es02
environment:
- node.name=es02
- cluster.name=elasticsearch-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: es03
environment:
- node.name=es03
- cluster.name=elasticsearch-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- ES_JAVA_OPTS=-Xms512m -Xmx512m
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata03:/usr/share/elasticsearch/data
networks:
- elastic
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://es01:9200
ports:
- "5601:5601"
networks:
- elastic
volumes:
esdata01:
driver: local
esdata02:
driver: local
esdata03:
driver: local
networks:
elastic:
driver: bridge
docker-compose up -d
모든 컨테이너가 정상적으로 실행되었는지 확인하려면 아래 명령어를 사용하세요.
docker ps
bash
curl -X GET "http://localhost:9200/_cluster/health?pretty"
클러스터 상태가 "status": "green" 또는 "status": "yellow"라면 정상적으로 실행된 것입니다.
Kibana 접근
Kibana는 Elasticsearch 데이터 시각화를 위한 도구입니다. 브라우저에서 http://localhost:5601에 접속하여 Kibana UI를 확인하세요.
운영 및 관리
Elasticsearch 클러스터를 유지하려면 docker-compose restart 명령어로 재시작할 수 있습니다.
데이터를 백업하려면 volumes를 관리해야 합니다.
노드를 추가하거나 설정을 변경하려면 docker-compose.yml을 수정하고 다시 실행하세요.
&& 추가 보안 설정 등
Elasticsearch 컨테이너에서 자동 생성된 인증서를 확인하고 사용할 수 있습니다.
인증서를 직접 생성하여 컨테이너에 배포할 수도 있습니다.
http_ca.crt 인증서를 로컬 머신으로 복사한 후, 이를 사용하여 보안 연결을 설정할 수 있습니다.
예제:
bash
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
docker exec -it es01 ls /usr/share/elasticsearch/config/certs
이 명령어를 실행하면 http_ca.crt, http.p12 등의 인증서 파일이 생성된 것을 확인할 수 있습니다.
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
이제 http_ca.crt 파일이 로컬에 복사되었으며, 이를 사용하여 보안 연결을 설정할 수 있습니다.
curl --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
이 명령어를 실행하면 인증서를 사용하여 보안 연결을 통해 Elasticsearch에 접근할 수 있습니다.
elasticsearch.ssl.certificateAuthorities: [ "/usr/share/kibana/config/certs/http_ca.crt" ]
이후 Kibana를 재시작하면 인증서를 적용한 상태에서 Elasticsearch와 연결됩니다.
curl -X GET "https://localhost:9200/_security/certificates?pretty" --cacert http_ca.crt -u elastic:$ELASTIC_PASSWORD
이 명령어를 실행하면 현재 사용 중인 인증서의 만료 날짜를 확인할 수 있습니다.
Docker 네트워크 설정: docker network create elastic 명령어를 사용하여 내부 네트워크를 구성하면 컨테이너 간 통신을 보호할 수 있습니다.
방화벽 규칙 적용: iptables 또는 클라우드 방화벽 설정을 통해 Elasticsearch와 Kibana의 포트(9200, 5601 등)에 대한 접근을 제한할 수 있습니다.
예제:
bash
sudo ufw allow 9200/tcp
sudo ufw allow 5601/tcp
3. 환경 변수 및 보안 설정
Docker 환경에서는 환경 변수를 활용하여 보안 설정을 적용할 수 있습니다.
ELASTIC_PASSWORD를 환경 변수로 설정하여 보안 강화를 할 수 있습니다.
network.host: 0.0.0.0 설정을 통해 외부 접근을 허용할 수도 있지만, 보안상 주의해야 합니다.
예제:
yaml
environment: