The following docker-compose.yml
is a simple starting point for using ElasticSearch within a docker-based setup:
version: '2.2' services: elasticsearch1: image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4 container_name: elasticsearch1 environment: - cluster.name=docker-cluster - node.name=elasticsearch1 - cluster.initial_master_nodes=elasticsearch1 - bootstrap.memory_lock=true - http.cors.allow-origin=http://localhost:1358,http://127.0.0.1:1358 - http.cors.enabled=true - http.cors.allow-headers=X-Requested-With,X-Auth-Token,Content-Type,Content-Length,Authorization - http.cors.allow-credentials=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./esdata1:/usr/share/elasticsearch/data ports: - 9200:9200 dejavu: image: appbaseio/dejavu container_name: dejavu ports: - 1358:1358
Now create the esdata1
directory with the correct permissions:
sudo mkdir esdata1 sudo chown -R 1000:1000 esdata1
We also need to configure the vm.max_map_count
sysctl parameter:
echo -e "\nvm.max_map_count=524288\n" | sudo tee -a /etc/sysctl.conf && sudo sysctl -w vm.max_map_count=524288
I recommend to place it in /opt/elasticsearch
, but you can place wherever you like.
If you want to autostart it on boot, see Create a systemd service for your docker-compose project in 10 seconds or just use this snippet from said post:
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin
This will create a systemd service named elasticsearch
(if your directory is named elasticsearch
like /opt/elasticsearch
) and enable and start it immediately. Hence you can restart using
sudo systemctl restart elasticsearch
and view the logs using
sudo journalctl -xfu elasticsearch
For more complex setup involving more than one node, see our previous post on ElasticSearch docker-compose.yml and systemd service generator