努力未来

Docker 기반 Elasticsearch + Kibana 개발 환경 구성하기

홍서현
홍서현Jul 21, 2025

📌 사전 준비

  • ✅ Docker 및 Docker Compose 설치 완료
  • ✅ 최소 4GB 이상의 메모리 확보 (Elasticsearch는 JVM 기반이라 메모리 소모가 큼)
  • ✅ Elasticsearch & Kibana 버전은 8.x 이상 기준 (8.12.2 사용 예시)

1️⃣ 도커 네트워크 생성

Elasticsearch와 Kibana 컨테이너가 동일 네트워크 상에서 통신할 수 있도록 브리지 네트워크를 생성합니다.


docker network create es-net

shell

2️⃣ Elasticsearch 컨테이너 실행 (보안 기능 활성화 + SSL 비활성화)


docker run -d --name es01 \
  --net es-net \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -e "xpack.security.enabled=true" \
  -e "xpack.security.http.ssl.enabled=false" \
  -e "ELASTIC_PASSWORD=changeme" \
  docker.elastic.co/elasticsearch/elasticsearch:8.12.2

shell
  • xpack.security.enabled=true: 인증/인가 기능 활성화
  • xpack.security.http.ssl.enabled=false: HTTP 레벨 SSL 인증 제거 (개발 환경에서는 생략 가능)
  • ELASTIC_PASSWORD: 기본 elastic 계정의 초기 비밀번호

🔐 이 설정으로 Elasticsearch는 비밀번호 기반 인증이 필요하며, HTTPS 없이도 접근 가능하게 됩니다.

3️⃣ elastic 사용자 비밀번호 초기화 (i 옵션 사용)

비밀번호를 명령어로 직접 입력하고자 할 때 -i 옵션을 사용합니다:


docker exec -it es01 bin/elasticsearch-reset-password -u elastic -i

shell
원하는 비밀번호를 입력하면 elastic 사용자의 비밀번호가 재설정됩니다.

4️⃣ Kibana 컨테이너 실행 및 연동 설정

Kibana는 Elasticsearch에 접속할 계정 정보가 필요하며, 내부적으로 kibana_system 계정을 사용합니다.


docker run -d --name kibana01 \
  --net es-net \
  -p 5601:5601 \
  -e "ELASTICSEARCH_HOSTS=http://es01:9200" \
  docker.elastic.co/kibana/kibana:8.12.2

shell

🔐 kibana_system 사용자 비밀번호 초기화

ocker exec -it es01 bin/elasticsearch-reset-password -u kibana_system -i

shell

이후 kibana.yml에서 해당 비밀번호를 등록해줘야 Kibana가 정상 작동합니다.

5️⃣ kibana.yml 수정 방법 (docker container 내부 or 커스텀 방식)

Kibana 설정 파일인 kibana.yml을 직접 수정해야 할 경우가 있습니다. 다음 2가지 방법 중 선택할 수 있습니다:

✅ 방법 1: 컨테이너 내부 진입 후 직접 수정


docker exec -it kibana01 /bin/bash
vi /usr/share/kibana/config/kibana.yml

shell

추가할 설정 예시:


server.name: kibana
server.host: "0"
elasticsearch.hosts: ["http://es01:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "your-kibana-password"

yaml
변경 후에는 컨테이너를 재시작해야 설정이 반영됩니다.

docker restart kibana01

shell

✅ 방법 2: docker-compose 또는 v 옵션으로 설정 마운트


-v ./kibana.yml:/usr/share/kibana/config/kibana.yml

shell

혹은 docker-compose.yml 구성 시:


services:
  kibana:
    image: docker.elastic.co/kibana/kibana:8.12.2
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://es01:9200
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    networks:
      - es-net

yaml

6️⃣ Elasticsearch 접속 확인

브라우저 또는 Postman에서 다음 URL로 접근:


http://localhost:9200

Basic Auth 설정

  • ID: elastic
  • PW: (3단계에서 설정한 비밀번호)

예시 응답:


{
  "name": "es01",
  "cluster_name": "docker-cluster",
  "version": {
    "number": "8.12.2"
  },
  ...
}

json

7️⃣ Kibana 접속 확인

브라우저에서 Kibana 접속:


http://localhost:5601

  • 로그인 ID: elastic
  • PW: (설정한 비밀번호)
로그인 시 Kibana 기본 셋업 마법사가 나타납니다.

✅ 비밀번호가 먹히지 않거나 인증 오류가 발생할 때

컨테이너 상태에 따라 .security 인덱스 캐시 문제가 발생할 수 있습니다. 이 경우에는 아래 명령어로 인덱스를 제거하고 다시 설정합니다:


DELETE /.security-7

⚠️ 단, 이 작업은 모든 사용자 정보 및 보안 구성을 초기화하므로 운영 환경에서는 절대 사용 금지입니다.

📊 전체 구성 요약

구성 요소컨테이너 이름포트인증 계정네트워크
Elasticsearches019200, 9300elastic 사용자es-net
Kibanakibana015601kibana_system 사용자es-net