Docker Build에서 Elasticsearch에 초기 데이터를 입력하고 싶습니다 🐳

4357 단어 도커Elasticsearch

소개



"아아, 틀렸어..."
"다시 시도..."
"컨테이너를 재부팅하고 초기 데이터를 다시 넣어야합니다 ..."
Elasticsearch를 개발에 사용하면 이런 일이 자주 있습니다.

그런 당신에게, Docker로 사용하는 개발 환경용의 Elasticsearch에 초기 데이터를 투입해 두자, 라고 하는 작은 재료입니다.

환경


  • macOS Catalina
  • docker desktop 2.5.0.1
  • Elasticsearch 7.10
  • kibana 7.10 (덤)

  • 데이터 샘플



    Elasticsearch 공식에서 셰익스피어 데이터를 가져옵니다.

    Loading sample data | Kibana Guide [7.1] | Elastic

    흐름



    Dockerfile에 데이터를 입력합니다. 
  • JSON 파일을 COPY
  • wait-for-it.sh를 COPY
  • Elascticsearch가 시작되기를 기다리고 bulk에서 데이터를 넣습니다

  • 입니다.
    wait-for-it.sh 라는 것은, 서비스의 기동을 감시해 주는 쉘 스크립트입니다.
    Docker의 공식 문서에서도 소개됩니다.

    Control startup and shutdown order in Compose | Docker Documentation

    파일들



    github에 파일을 두고 있습니다.
    jrfk/docker-es-entry-initial-data

    Dockerfile



    이런 느낌입니다.
    
    FROM docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    
    ## data
    RUN mkdir /data && chown -R elasticsearch:elasticsearch /data
    COPY ./data/ /data/
    RUN chmod 755 /data/*
    
    ## wait-for-it
    ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /utils/wait-for-it.sh
    RUN chown -R elasticsearch:elasticsearch /utils/wait-for-it.sh && chmod 755 /utils/wait-for-it.sh
    
    ## RUN
    RUN echo 'discovery.type: single-node' >> config/elasticsearch.yml
    RUN /usr/local/bin/docker-entrypoint.sh elasticsearch -p /tmp/epid & /bin/bash /utils/wait-for-it.sh -t 0 localhost:9200 -- /data/es_init.sh; kill $(cat /tmp/epid) && wait $(cat /tmp/epid); exit 0;
    
    
    RUN echo 'discovery.type: single-node' >> config/elasticsearch.yml하지만 7세대 Elasticsearch에서 node의 지정이 필수입니다.
    개발 환경이므로 single-node에서 사용해 봅시다.

    시작



    다음 명령을 실행해 봅시다.
    docker-compose build  
    docker-compose up -d
    

    확인



    데이터가 투입되고 있는 것을 확인할 수 있을까 생각합니다!



    전 자료



    Stack Overflow에 원본 자료가 있습니다.
    이대로 하면, 이런 에러가 나서 기동할 수 없어서.
    ERROR: [1] bootstrap checks failed
    [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
    ERROR: Elasticsearch did not exit normally - check the logs at /usr/share/elasticsearch/logs/docker-cluster.log
    

    7세대 ElasticSearch에서 기동시에 node의 지정이 필수가 되고 있기 때문이었습니다.

    How to add an elasticsearch index during docker build - Stack Overflow

    좋은 웹페이지 즐겨찾기