Elasticsearch in Docker

Elasticsearch in Docker

Gar nicht lange rum machen, gleich in die Vollen, hier das Docker Compose Stack:

 1version: '3.9'
 2
 3services:
 4  elasticsearch:
 5    image: elasticsearch:7.17.8
 6    ports:
 7      - "9200:9200"
 8    networks:
 9      - efk
10    environment:
11      - discovery.type=single-node
12    volumes:
13      - type: volume
14        source: efk-data
15        target: /usr/share/elasticsearch/data
16    deploy:
17      resources:
18         limits:
19           memory: 6g
20      placement:
21         max_replicas_per_node: 1
22         constraints:
23           - node.labels.elk == here
24      mode: replicated
25      replicas: 1
26      restart_policy:
27         condition: any
28         delay: 2s
29         window: 120s
30      update_config:
31         parallelism: 1
32         delay: 10s
33         order: stop-first
34
35  kibana:
36    image: kibana:7.17.8
37    networks:
38      - efk
39    environment:
40      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
41    ports:
42      - "5601:5601"
43    depends_on:
44      - elasticsearch
45    deploy:
46      resources:
47         limits:
48           memory: 1g
49      placement:
50         max_replicas_per_node: 1
51         constraints:
52           - node.labels.elk == here
53      mode: replicated
54      replicas: 1
55      restart_policy:
56         condition: any
57         delay: 2s
58         window: 120s
59      update_config:
60         parallelism: 1
61         delay: 10s
62         order: stop-first 
63
64networks:
65  efk:
66
67volumes:
68 efk-data:
69   driver_opts:
70      type: "nfs"
71      o: "addr=192.168.1.151,nolock,soft,rw,nfsvers=4"
72      device: ":/docker/elk/data"

Sehen wir uns das an:

Zuerst habe ich mich bewusst für Version 7.17 entschieden. Dazu gab es passende Dokumente im Netz. Versuche mit Version 8 liefen nicht so gut, u.a. weil dort mit Sicherheitstokens gearbeitet wird, die irgendwo im Containerlog beim 1. Start stehen. Lästig im Swarm.

Elasticsearch und Kibana kommen in ein gemeinsames Netz, was deren Anbindung zueinander vereinfacht. Die Daten vom Elasticsearch kommen natürlich auf ein Volume. Da im Swarm auf ein NFS.

Placement und Resourcen, damit Docker das Zeug auf die richtigen Hosts im Swarm packt.

discovery.type=single-node steht in diversen Beispielen und auch versteckt in der Doku, also rein damit.

docker stack deploy -c ./docker-stack.yml

Und tatsächlich lief nach etlichen Minuten dann alles an:

  • Die Images waren recht groß, d.h. der erste Download dauerte schonmal einige Zeit.
  • Start der Elasticsearch Datenbank dauert auch.
  • Start von Kibana auch.

Jetzt mit dem Browser auf http://euer-host:5601 gehen. Der Host ist der, wo euer Docker-Swarm läuft. Der Port 5601 wird überall gemappt, dank Swarm Mode.

siehe auch