Docker: Elasticsearch nasıl kurulur ve docker ile yönetilir

Elasticsearch, Apache Lucene üzerine kurulu dağıtılmış bir arama ve analiz motorudur.  HTTP web arayüzü ve şemasız JSON belgeleriyle dağıtılmış, çok kiracılı, tam metinli bir arama motoru sağlar.  Elasticsearch hızla en popüler arama motoru haline geldi ve genellikle günlük analitiği, tam metin araması, güvenlik istihbaratı, iş analitiği ve operasyonel zeka kullanım senaryoları için kullanılıyor.

Bu kılavuzda, Elasticsearch’ü docker kullanarak nasıl kuracağımızı öğreneceğiz.

 

1. Docker’ın kurulu olduğundan emin olun

Devam etmeden önce docker’ın yerel olarak kurulu olduğundan emin olun.

 

2. Elasticsearch’ü başlatmak için docker run komutunu kullanma

Amacımıza ulaşmak için docker run komutunu kullanacağız.  İstediğimiz Elasticsearch sürümü 7.16.3’tür – bu kılavuzun yazıldığı an itibariyle Elasticsearch görüntüsünün en son sürümü.

İlk önce bir birim oluşturun.  Konteyner yeniden oluşturma işlemlerinin devam etmesi için konteyner verilerini monte etmek için yerel bir docker birimi kullanılabilir.

docker volume create elast_data

Daha sonra konteyneri şu komutla çalıştırın:

$ docker run -d \
     -p 9200:9200 -p 9300:9300 \
     -e "discovery.type=single-node" \
     -v elast_data:/usr/share/elasticsearch/data \
     docker.elastic.co/elasticsearch/elasticsearch:7.16.3
Unable to find image 'docker.elastic.co/elasticsearch/elasticsearch:7.16.3' locally
7.16.3: Pulling from elasticsearch/elasticsearch
c661c71060f1: Pull complete
d990ef6f2b05: Pull complete
82a269b58846: Pull complete
b55a8747471f: Pull complete
fc908a7aa21e: Pull complete
71c4eb4161c5: Pull complete
746cbfc9ba83: Pull complete
a82834885d6f: Pull complete
a19c3acab779: Pull complete
Digest: sha256:0efc3a054ae97ad00cccc33b9ef79ec022970b2a9949893db4ef199edcdca2ce
Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.16.3
57ba51f4a23615ebde5f3063b04296021c3d43a78a45658b4a020af161d93c96

Yukarıdaki komutta:

  • -d, liman işçisi konteynerinin bağımsız bir işlem olarak çalışmasını bildirir.  Konteyneri arka planda çalıştırır ve konteyner kimliğini yazdırır
  • -p bağlantı noktası eşlemesi içindir.  Container'a, konteyner portunu harici olarak açığa çıkarması talimatını veriyoruz.  Konteyner bağlantı noktası 9200 ve 9300, ana bilgisayar bağlantı noktası 9200 ve 9300 ile eşlenir. Bu, hizmete localhost:9200 aracılığıyla erişilebileceği anlamına gelir.
  • -e “discovery.type=single-node” bir ortam değişkenini tanımlar
  • docker.elastic.co/elasticsearch/elasticsearch:7.16.3 çalıştırdığımız görüntüyü tanımlar.  Elasticsearch görselinin 7.16.3 sürümünü kullanıyoruz.

Konteynerimizin beklendiği gibi çalıştığını kontrol etmek için docker ps komutunu kullanın:

$ docker ps
CONTAINER ID   IMAGE                                                  COMMAND                  CREATED         STATUS         PORTS                                                                 NAMES
f56f14827473   docker.elastic.co/elasticsearch/elasticsearch:7.16.3   "/bin/tini -- /usr/l…"   3 seconds ago   Up 3 seconds   0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 127.0.0.1:9300->9300/tcp   my-elast

Benim durumumda konteyner bizim verdiğimiz isimle my-elast olarak çalışıyor.  Etkileşimli olarak /bin/bash komutunu çalıştırırken docker exec komutunu kullanarak konteynere giriş yapabiliriz.  Burada ayrıca yukarıda belirttiğimiz kimlik bilgileri ile postgtres’e giriş yapıp versiyon kontrolü yapıyoruz.

$ docker exec -it my-elast /bin/sh
sh-5.0# curl -X GET "localhost:9200/"
{
  "name" : "f56f14827473",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "EOSx1cc_SNSO3NxbyVZD-A",
  "version" : {
    "number" : "7.16.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022",
    "build_date" : "2022-01-06T23:43:02.825887787Z",
    "build_snapshot" : false,
    "lucene_version" : "8.10.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
sh-5.0#

Kullanılmadığı zaman kabı temizlemeniz gerekiyorsa, şu komutu kullanarak konteyneri durdurabilir ve kaldırabilirsiniz:

docker stop my-elast

# Removing
docker rm my-elast

3. Elasticsearch’ü çalıştırmak için docker-compose’u kullanma

Docker-compose ile aynı işlevselliği elde edebiliriz.  Docker Compose, çok kapsayıcılı Docker uygulamalarını tanımlamaya ve çalıştırmaya yönelik bir araçtır.  Compose ile uygulamanızın hizmetlerini yapılandırmak için bir YAML dosyası kullanırsınız.

Docker Compose, hizmeti (bizim durumumuzda Redis), kullanılacak görüntü, varsayılan Dockerfile komutunu geçersiz kılan komut ve kullanıma sunulacak port’lar gibi özelliklerle tanımlamanıza olanak tanır.

Yukarıdaki işlevselliğe ulaşmak için docker-compose’u nasıl kullanacağımız aşağıda açıklanmıştır.  Bunu docker-compose.yaml olarak kaydedin:

version: '3.9'

services:
  my-elast:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.16.3
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - elast_data:/usr/share/elasticsearch/data
    environment:
      - "discovery.type=single-node"

volumes:
  elast_data:

Şimdi konteyneri çalıştırın:

$ docker-compose up -d
Creating network "elast_default" with the default driver
Creating volume "elast_elast_data" with default driver
Creating elast_my-elast_1 ... done

Komutlar:

  • up konteyneri çalıştırır
  • -d müstakil moda alır

ps komutunu kullanarak konteyner işlemlerini doğrulayın:

$ docker-compose ps
      Name                    Command               State                               Ports
--------------------------------------------------------------------------------------------------------------------------
elast_my-elast_1   /bin/tini -- /usr/local/bi ...   Up      0.0.0.0:9200->9200/tcp,:::9200->9200/tcp,
                                                            0.0.0.0:9300->9300/tcp,:::9300->9300/tcp

Konteynerde oturum açmak ve redis’te oturum açmak için şunu kullanın:

$ docker-compose exec my-elast /bin/sh
sh-5.0# curl -X GET "localhost:9200/"
{
  "name" : "876b169c35d6",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "UmBfLoVARnKvLc79Nk5Yhg",
  "version" : {
    "number" : "7.16.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "4e6e4eab2297e949ec994e688dad46290d018022",
    "build_date" : "2022-01-06T23:43:02.825887787Z",
    "build_snapshot" : false,
    "lucene_version" : "8.10.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
sh-5.0#

3. Elasticsearch docker’ı çalıştırmak için Systemd’yi kullanma

Elasticsearch docker konteynerimizi systemd üzerinden yönetebiliriz.  Yukarıda az önce oluşturduğumuz elasticsearch konteynerini işlemek için bir systemd kaynak dosyası oluşturalım.

Bir elasticsearch docker servisi oluşturun:

sudo vim /etc/systemd/system/elasticsearch-docker.service

Bu içeriği ekleyin

[Unit]
Description=Custom Elasticsearch Docker Container
After=network.target

[Service]
Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/docker rm -f myelast

ExecStart=/usr/bin/docker run \
    --name myelast \
    -p 9200:9200 -p 9300:9300 \
    -e "discovery.type=single-node" \
    -v elast_data:/usr/share/elasticsearch/data \
    docker.elastic.co/elasticsearch/elasticsearch:7.16.3

ExecReload=-/usr/bin/docker stop myelast
ExecReload=-/usr/bin/docker rm myelast
ExecStop=-/usr/bin/docker stop myelast
Restart=always
RestartSec=30

[Install]

Daha sonra systemd kataloğunu yeniden yükleyebilir ve hizmeti başlatabiliriz:

sudo systemctl daemon-reload
sudo systemctl start <meta charset="utf-8">elasticsearch-docker

Hizmet durumunu onaylayın

$ sudo systemctl status elasticsearch-docker
● elasticsearch-docker.service - Custom Elasticsearch Docker Container
   Loaded: loaded (/etc/systemd/system/elasticsearch-docker.service; static; vendor preset: disabled)
   Active: active (running) since Tue 2022-01-25 16:05:54 UTC; 24s ago
  Process: 43524 ExecStartPre=/usr/bin/docker rm -f myelast (code=exited, status=0/SUCCESS)
 Main PID: 43531 (docker)
    Tasks: 7 (limit: 23176)
   Memory: 18.8M
   CGroup: /system.slice/elasticsearch-docker.service
           └─43531 /usr/bin/docker run --name myelast -p 9200:9200 -p 9300:9300 -e discovery.type=single-node -v elast_data:/usr/share/elasticsearch/data docker.elastic.co/elasticse>

Jan 25 16:06:17 dev-rockysrv.inv.re docker[43531]: {"type": "server", "timestamp": "2022-01-25T16:06:17,311Z", "level": "INFO", "component": "o.e.i.g.GeoIpDownloader", "cluster.n

Docker aracılığıyla yönetilen bir konteyneri temel alan özel bir systemd hizmeti kurduk!

 

Yazının orijinalini buradan okuyabilirsiniz