관리 메뉴

가끔 보자, 하늘.

Elasticsearch Docker Desktop으로 실행해보기 본문

개발 이야기/인프라 구축 및 운영

Elasticsearch Docker Desktop으로 실행해보기

가온아 2024. 8. 16. 01:31

우선 Docker Desktop에서 Elasticsearch , Kibana 이미지를 찾아 실행합니다. 

둘 모두 잘 실행되었다면 kibana로 접속합니다. http://localhost:5601로 접속하면 아래와 같은 화면이 뜹니다. 

docker 로 둘을 실행하면 서로 다른 네트웍으로 인식하고 elasticsearch에서는 kibana의 원격접속 인증을 위해 elasticsearch에서 발급한 토큰을 입력하라고 요청합니다. 

elasticsearch docker에 exec 탭에서 아래 커멘드를 입력해 토큰을 생성합니다. 

bin/elasticsearch-create-enrollment-token --scope kibana

이렇게 발급된 코드값을 복사해 kibana 웹 페이지에서 입력합니다. 그럼 아래와 같은 코드값을 입력하라는 창이 다시 나옵니다. 

이 코드는 kibana docker logs탭에서 확인할 수 있습니다.

(* 처음부터 여기 출력된 링크를 통해 kibana를 실행했다면 인증코드 확인 창은 안뜹니다.)

이제 정상적으로 시작되고 곧 id,pw를 문의하는 창이 뜹니다.

기본 Username은 elastic인데, 비번은 설정한 적이 없기에 초기화해서 사용하면 됩니다. elasticsearch docker의 exec 탭으로 다시 이동해 아래 내용을 입력합니다. 

bin/elasticsearch-reset-password -u elastic -i

이제 패스워드를 초기화하여 로그인이 가능합니다.

이제 외부에서의 연결이 가능한지 테스트 해봅니다. 

% curl http://localhost:9200

curl: (52) Empty reply from server

8.x부터는 http 연결을 지원하지 않고 https만 가능합니다. 이를 위해 docker 에 설치된 elasticsearch에 있는 인증서를 docker cp 명령을 이용해 로컬로 복사해 사용해야 합니다. 

docker cp 16ae7e60abaf:/usr/share/elasticsearch/config/certs/http_ca.crt .

이제 curl에 인증서를 포함해 https로 연결하면 됩니다. 

% curl --cacert http_ca.crt -u elastic:your_password https://localhost:9200

{
  "name" : "16ae7e60abaf",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "evrPW-hDQmmQ9U3CcMdmJQ",
  "version" : {
    "number" : "8.15.0",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "1a77947f34deddb41af25e6f0ddb8e830159c179",
    "build_date" : "2024-08-05T10:05:34.233336849Z",
    "build_snapshot" : false,
    "lucene_version" : "9.11.1",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

python에서는 다음과 같이 연결 테스트를 해볼 수 있습니다.

es_client = None
def initialize_elasticsearch_client():
    global es_client
    es_host = 'https://localhost:9200'
    es_username = 'elastic'
    es_password = 'your_password'
    ca_certs_path = './http_ca.crt'
    
    try:
        es_client = Elasticsearch(
            [es_host],
            basic_auth=(es_username, es_password),
            verify_certs=True,
            ca_certs=ca_certs_path,
        )
        if es_client.ping():
            print("Elasticsearch 클라이언트 초기화 성공")
        else:
            print("Elasticsearch 클라이언트 초기화 실패: Elasticsearch 서버가 응답하지 않습니다.")
    except ConnectionError as e:
        print("Elasticsearch 클라이언트 초기화 실패: 연결 오류 발생:", e)
    except Exception as e:
        print("Elasticsearch 클라이언트 초기화 실패:", e)
        
   initialize_elasticsearch_client()

 

이렇게 로컬 개발환경 설정을 위한 docker elasticsearch 실행 방법을 간단히 정리해 보았습니다. 도움이 되셨기를... ^^

반응형