-
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는 미리 디렉토리에 옮겨 놓습니다.
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
5. Docker Hub Repository 생성
Create Repository 클릭 -> 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.17. 업로드 완료된 Docker Hub 모습
8. 실제 업로드된 Docker Image 사용 시
위의 사용자 레파지토리 + 테그명으로 사용하시면 됩니다.
$ sudo docker pull lucia8918/elasticsearch:0.1
( 다음 포스팅에서 해당 업로드된 Docker Image를 바탕으로 Kubernetes의 StatefulSet 을 통해 Elasticsearch Cluster 환경 구축하는 내용 업로드 할게요. )