YDOOK-Jinwei Lin
平台:腾讯云-轻量应用服务器-ubuntu24.04 LTS
Docker查看已有全部镜像:
docker images -a
拉取对应版本的Elasticsearch镜像:
sudo docker pull docker.elastic.co/elasticsearch/elasticsearch:8.16.1
Docker查看已有全部镜像:
查看当前目录:
在根目录 / 下面,创建一个用于持久化存储Elasticsearch数据的目录:
sudo mkdir -p /data/elasticsearch
修改该目录的所有者:
sudo chown 1000:1000 /data/elasticsearch # 更改所有者为默认的elasticsearch用户
通过 ls -l 命令查看目录权限与所有者(用户):
drwxr-xr-x
是一个表示文件权限和类型的字符串,由10个字符组成,分为四个部分:
文件类型(第1个字符):
d
表示这是一个目录(directory)。如果是普通文件,则会显示为-
,其他特殊类型的文件可能用其他字符表示,例如l
表示符号链接(symbolic link),c
表示字符设备文件(character device),b
表示块设备文件(block device)等。所有者的权限(接下来的3个字符):
rwx
表示文件所有者拥有读取(read)、写入(write)和执行(execute)的权限。在这个例子中,所有者可以读、写和进入这个目录。所属组的权限(再接下来的3个字符):
r-x
表示与文件所属组关联的用户拥有读取和执行的权限,但没有写入权限。这意味着这些用户可以读取目录内容和进入该目录,但不能修改或删除该目录中的文件。其他人的权限(最后的3个字符):
r-x
表示对于既不是文件所有者也不属于文件所属组的其他所有用户,他们也拥有读取和执行的权限,同样没有写入权限。总结,
drwxr-xr-x
表示这是一个目录,所有者有完全控制权(读、写、执行),而同组用户和其他用户只能读取和执行(即可以查看目录内容和进入目录,但不能创建、删除或重命名文件)。这种权限设置通常用于公共可读但受保护免于随意更改的目录。
定义 Elasticsearch容器并启动:有三种方式:
1. 正常启动,不自动运行:
- sudo docker run -d --name elasticsearch \
- -v /data/elasticsearch:/usr/share/elasticsearch/data \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
首次启动Elasticsearch容器时,可以指定一个重启策略,这样即使服务器重启,Docker也会根据这个策略重新启动容器。对于Elasticsearch,推荐使用
always
或unless-stopped
的重启策略。
always
: 无论容器退出状态如何,Docker都会尝试重启容器。unless-stopped
: Docker会重启容器,除非容器被手动停止。
2. unless-stopped启动:
- sudo docker run -d --name elasticsearch \
- --restart unless-stopped \
- -v /data/elasticsearch:/usr/share/elasticsearch/data \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
3. always启动:
- sudo docker run -d --name elasticsearch \
- --restart always \
- -v /data/elasticsearch:/usr/share/elasticsearch/data \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
--restart always
确保容器无论任何原因停止后都会被重新启动。-v /data/elasticsearch:/usr/share/elasticsearch/data
将宿主机的目录挂载到容器内的Elasticsearch数据目录,以便于数据持久化。-p 9200:9200 -p 9300:9300
映射容器内部端口到宿主机端口,分别对应REST API和节点间通信端口。-e "discovery.type=single-node"
设置单节点集群模式,适用于测试环境。
运行结果:
为了方便,最好使用下面代码运行:
- sudo docker run -d --name elasticsearch \
- --restart always \
- -v /data/elasticsearch:/usr/share/elasticsearch \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
即,映射容器的整个elasticsearch目录到宿主机/data/elasticsearch中,方便整体配置。
Docker 本身提供了对容器级别的资源限制,包括内存限制。可以通过 --memory 参数进行配置。要限制整个容器使用的内存量(不仅仅是 JVM 堆),可以采用下面代码:
- sudo docker run -d --name elasticsearch \
- --restart always \
- --memory="2g" \
- -v /data/elasticsearch:/usr/share/elasticsearch \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
注:--memory="2g" \ # 限制整个容器的最大内存使用量为2GB。
可以定义多个 -v
选项来挂载多个卷(volumes)。每个 -v
选项允许指定一个宿主机上的目录或文件映射到容器内的一个位置:
- sudo docker run -d --name elasticsearch \
- --restart always \
- --memory="2g" \
- -v /dockerData/elasticsearch/data:/usr/share/elasticsearch/data \
- -v /dockerData/elasticsearch/config:/usr/share/elasticsearch/config \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
去掉always,使用unless-stopped重启:
- sudo docker run -d --name elasticsearch \
- --restart unless-stopped \
- --memory="2g" \
- -v /dockerData/elasticsearch/data:/usr/share/elasticsearch/data \
- -v /dockerData/elasticsearch/config:/usr/share/elasticsearch/config \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
单次不重启:
- sudo docker run -d --name elasticsearch \
- --memory="2g" \
- -v /dockerData/elasticsearch/data:/usr/share/elasticsearch/data \
- -v /dockerData/elasticsearch/config:/usr/share/elasticsearch/config \
- -p 9200:9200 -p 9300:9300 \
- -e "discovery.type=single-node" \
- -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
- docker.elastic.co/elasticsearch/elasticsearch:8.16.1
评论记录:
回复评论: