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