ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Elasticsearch 커스텀 Config 설정하여 Docker Image 생성 및 Docker Hub Upload 방법
    ELK/Elasticsearch 2019. 5. 28. 18:04

     

    ElasticSearch Docker 이미지를 OS, JDK 및 ElasticSearch의 사용자 Config 로 셋팅 하는 방법과 Docker Hub에 Public 하게 업로드 하는 방법입니다.

     

    ( 저는 ubuntu 장비에서 Docker 설치 후에 작업하였고,

    다음 포스팅에서 해당 업로드된 도커 이미지를 Kubernetes의 StatefulSet 을 통해 Cluster 환경 구축하는 내용 업로드 예정이에요. )

     

    #이미지 runtime 환경

    ubuntu-18.04

    jdk-8u191

    elasticsearch-6.4.3

     

    1. 작업 디렉토리 및 파일 셋팅

    기본적으로 jdk와 elasticsearch 그리고 config는 미리 디렉토리에 옮겨 놓습니다.

     

    작업 디렉토리

     

    Docker Image에 추가할 Elasticsearch config 디렉토리

     

     

    2. 도커 파일 생성

    Dockerfile 내에 아래와 같이 Docker Image를 생성할 수 있는 DockerFile을 작성합니다.

     

    아래 Dokcerfile 내용을 보면, 기본 OS 및 JAVA 셋팅

    그리고 Elasticsearch에 사용자 Config를 Copy 하는 부분을 확인 할 수 있습니다.

     

    ---------------------------------------------- Dockerfile 내용 : START ----------------------------------------------

     

    #Docker Build CMD
    #docker build -t elasticsearch-6.4.3-ubuntu-18.04-jdk8u191:0.3 . --build-arg arg_user_home=/home/es --build-arg arg_es_version=6.4.3 --build-arg arg_java_version=jdk-8u191
    #docker hub upload
    # 만든 이미지 명 도커 허브용으로 변경
    # sudo docker tag elasticsearch-6.4.3-ubuntu-18.04-jdk-8u191:latest lucia8918/elasticsearch:0.2
    # 만든 이미지 도커 허브에 업로드
    # sudo docker push lucia8918/elasticsearch:0.2

    # 기본 OS는 ubuntu 18.04로 지정
    From ubuntu:18.04
    MAINTAINER Kim, Jihwang lucia8918@gmail.com

    # 도커 Image build시 argument
    ARG arg_user_home
    ARG arg_es_version

    ENV PATH $arg_user_home/apps/elasticsearch/bin:$arg_user_home/apps/jdk/bin:$PATH
    ENV ES_HOME $arg_user_home/apps/elasticsearch
    ENV JAVA_HOME $arg_user_home/apps/jdk

     

    #추가적으로 docker cmd를 통해서 확인시 필요하 apt-get 유틸들과 sudo 권한도 미리 지정해 줍니다. 
    RUN apt-get update
    RUN apt-get install sudo

    RUN groupadd -g 1000 elasticsearch && useradd elasticsearch -u 1000 -g 1000 -m -b $arg_user_home -d $arg_user_home -s /bin/bash && echo 'elasticsearch:elasticsearch' | chpasswd && adduser elasticsearch sudo
    USER elasticsearch

    # 기본 디렉토리를 생성 합니다.
    WORKDIR $arg_user_home
    RUN mkdir apps

    # 현재 작업 디렉토리를 선언 합니다.
    WORKDIR $arg_user_home/apps

    # 로컬에 파일이 없고, 원격지 파일을 받고자 할때
    #RUN wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$arg_es_version.tar.gz

     

    # 현재 경로에 elasticsearch, jdk를 미리 다운로드 받아 놓은 케이스입니다. 

    COPY elasticsearch-$arg_es_version.tar.gz .
    COPY jdk-8u191-linux-x64.tar.gz .

    # 압축을 해제 합니다.(자동으로 해제 됩니다.)
    RUN tar -xvzf elasticsearch-$arg_es_version.tar.gz
    RUN tar -xvzf jdk-8u191-linux-x64.tar.gz
    RUN rm -f elasticsearch-$arg_es_version.tar.gz
    RUN rm -f jdk-8u191-linux-x64.tar.gz

    # 설정 파일을 추가 합니다.

    # 해당 Dockerfile과 같은 경로에 사용자 Elasticsearch Custom Config를 복사해 둡니다.

    # 해당 Config를 Docker Image 결로에 복사 합니다.
    COPY config/elasticsearch.yml elasticsearch-$arg_es_version/config/
    COPY config/jvm.options elasticsearch-$arg_es_version/config/
    COPY config/log4j2.properties elasticsearch-$arg_es_version/config/

    # symlink 를 설정 합니다.
    RUN ln -s elasticsearch-$arg_es_version elasticsearch
    RUN ln -s jdk1.8.0_191 jdk

    # WORKDIR 을 변경 합니다.
    WORKDIR elasticsearch-$arg_es_version
    RUN set -ex && for path in data logs config/scripts; do \
            mkdir -p "$path"; \
            chown -R elasticsearch:elasticsearch "$path"; \
        done

    # 데몬을 바로 실행 합니다.
    #CMD bin/elasticsearch

     

    #ElasticSearch에서 외부와의 통신을 위한 Rest 대역(920X),

    #ElasticSearch에서 Node 간의 TCP를 위한 TCP 대역(930X),
    EXPOSE 9200 9201 9202 9203 9204 9300 9301 9302 9303 9304

     

    ---------------------------------------------- Dockerfile 내용 : END ----------------------------------------------

     

     

    3. Docker Image Build

    아래 명령어를 통해 elasticsearch-6.4.3-ubuntu-18.04-jdk8u191:0.3 이라는 Docker Image를 생성합니다.

     

    $ docker build -t elasticsearch-6.4.3-ubuntu-18.04-jdk8u191:0.3 . --build-arg arg_user_home=/home/es --build-arg arg_es_version=6.4.3 --build-arg arg_java_version=jdk-8u191 

     

     

    4.  해당 Docker image 생성 확인

    아래 커멘드를 통해 정상적으로 생성된 이미지 확인 가능 합니다.

     

    $ docker images

    Docker Image 생성 된 모습

     

    5. Docker Hub Repository 생성

    Create Repository 클릭 -> elasticsearch repository 생성

    Docker Hub 사용자 Repository Main

     

    Dockerhub elasticsearch Repository 생성 모습

     

     

    6. 생성한 Docker image tag 변경 및 Docker Hub에 업로드

     

    # 만든 이미지 테그명을 도커 허브 레파지토리용으로 변경 합니다.
    $ sudo docker tag elasticsearch-6.4.3-ubuntu-18.04-jdk-8u191:0.3 lucia8918/elasticsearch:0.1

     

    # 만든 이미지를 자신의 도커 허브에 업로드 합니다. 뒤에 버저닝은 설정에 따라 docker hub에서 관리됩니다.
    $ sudo docker push lucia8918/elasticsearch:0.1

     

     

    7. 업로드 완료된 Docker Hub 모습

    업르드된 Docker 이미지 및 tags

     

    8. 실제 업로드된 Docker Image 사용 시

    위의 사용자 레파지토리 + 테그명으로 사용하시면 됩니다.

     

    $ sudo docker pull lucia8918/elasticsearch:0.1

     

     

    ( 다음 포스팅에서 해당 업로드된 Docker Image를 바탕으로 Kubernetes의 StatefulSet 을 통해 Elasticsearch Cluster 환경 구축하는 내용 업로드 할게요. )

Designed by Tistory.