본문 바로가기
프로젝트

GiftFunding) Docker Compose로 es와 kibana 띄우기 + nori 까지 설치

by son_i 2023. 12. 9.
728x90

이전 포스팅에서 따로따로 docker image 다운받고 실행시켜줬는데 이걸 docker-compose를 이용해서 한 번에 실행시키도록 했다.

 

Docker Compose?

여러 개의 컨테이너들을 관리, 실행하기 위한 툴로 각각 독립된 컨테이너의 실행을 정의.
yml 포맷으로 작성되고 여러 컨테이너들을 한 번에 관리할 수 있게 도와줌.

 

작성 법

: 프로젝트 루트 경로에 파일을 만들고 실행 설정을 적어둠. 터미널에서 도커 명령어를 사용하여 컨테이너를 실행하거나 종료시킴.

: yml 파일은 크게 버전 정의, 서비스 정의, 볼륨 정의, 네트워크 정의의 4가지 항목으로 구성.

많이 사용하는 것은 서비스 정의이고, 볼륨과 네트워크는 서비스로 생성된 컨테이너에 선택적으로 사용.

 : yml파일에서 들여쓰기 할 때 탭은 도커 컴포즈가 인식하지 못 하믐로 2개의 스페이스를 이용해 하위항목 구분.

version: '3.7'
services:     // 컨테이너 설정
  es:   //컨테이너 1 서비스 명
    build:
      context: .
      args:
        VERSION: 7.9.1
    container_name: es
    environment:
      - node.name=single-node
      - cluster.name=soni
      - discovery.type=single-node
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - es-bridge

  kibana:    //컨테이너 2 서비스 명
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.9.1   //컨테이너에서 사용할 base image 지정
    environment: //컨테이너 안의 환경변수 설정
      SERVER_NAME: kibana
      ELASTICSEARCH_HOSTS: http://es:9200
    ports:   // -p옵션과 동일
      - 5601:5601
    # Elasticsearch Start Dependency
    depends_on: //es 컨테이너로 연결
      - es
    networks:
      - es-bridge

networks:
  es-bridge:
    driver: bridge

 

- version : yml 파일 포맷의 버전을 나타냄. 도커 컴포즈 버전마다 사용하는 yml 포맷 버전이 있고 도커 컴포즈 버전은 도커 엔진 버전에 의존성이 있으므로 가능하면 최신버전을 사용하는 것이 좋음.

 

나는 도커 버전이 20대니까 3.8로 설정 !

$ docker -v
Docker version 24.0.6, build ed223bc


- services : 생성될 컨테이너들을 묶어놓은 단위. 이 항목에 쓰인 각 서비스는 컨테이너로 구현되며 , 하나의 프로젝트로서 도커 컴포즈에 의해 관리됨. 서비스의 이름은 services의 하위 항목으로 정의하고, 컨테이너의 옵션은 서비스 이름의 하위 항목에 정의.

 

내가 설정한 걸로는 es와 kibana 두 개의 컨테이너가 올라가게 될 것이다.

 

  - 컨테이너 옵션

  • image : 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름
  • links : docker run 명령어의 --link와 같으며, 다른 서비스에 서비스 명만으로 접근할 수 있도록 설정.
  • environment : docker run 명령어의 --env, -e 옵션과 동일. 서비스의 컨테이너 내부에서 사용할 환경변수를 지정하며, 딕셔너리나 배열 형태로 사용.
  • command : 컨테이너가 실행될 때 수행할 명령어를 설정하며, docker run 명령어의 마지막에 붙는 커맨드와 같음
  • depends_on : 특정 컨테이너에 대한 의존 관계를 나타내며, 이 항목에 명시된 컨테이너가 먼저 생성되고 실행됨. 위에서 작성한대로면 es가 kibana보다 먼저 생성됨. links도 depends_on과 같이 컨테이너의 생성 순서와 실행 순서를 정의하지만 depends_on은 서비스 이름으로만 접근할 수 있음.
  • ports : docker run 명령어의 -p와 같으며 서비스의 컨테이너를 개방할 포트 설정
  • build : build항목에 정의된 도커 파일에서 이미지를 빌드해 서비스의 컨테이너를 생성하도록 설정. build항목에서는 도커 파일에 사용될 컨텍스트나 도커파일의 이름, 도커파일에서 사용될 인자 값을 설정할 수 있음.

나같은 경우 build에 Dockerfile을 지정해줬다 ! 거기에 들어갈 변수값 VERSION도 지정을 해주었다. Dockerfile에서는 elasticsearch 이미지를 가져오고 nori를 설치해준다.

 

Dockerfile

ARG VERSION
FROM docker.elastic.co/elasticsearch/elasticsearch:${VERSION}
RUN elasticsearch-plugin install analysis-nori

- networks : 도커 컴포즈는 생성된 컨테이너를 위해 기본적으로 브리지 타입의 네트워크를 생성. 그러나 yml 파일에서 driver 항목을 정의해 서비스의 컨테이너가 브리지 네트워크가 아닌 다른 네트워크를 사용하도록 설정할 수 있음. 특정 드라이버에 필요한 옵션은 하위 항목인 driver_opts로 전달할 수 있음.

 

 


위처럼 els.yml과 Dockerfile을 만들어주고 이제 실행을 시켜보자 !

도커 실행

$ docker compose -f els.yml up -d

* 기본 실행 도커파일은 docker-compse.yml인데 es.yml로 만들어서 지정해주기 위해 -f 옵션 사용.

* -d 옵션으로하면 데몬으로 실행.

 

도커 죽이기 

$ docker compose -f els.yml down

 

정상 실행 됐고 

 

es도 kibana도 잘 실행된다 !

노리 설치까지 잘 된 걸 확인했다 !

 

참조

https://seosh817.tistory.com/387#%EB%8F%84%EC%BB%A4%20%EC%BB%B4%ED%8F%AC%EC%A6%88%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0-1