deepin系统docker学习9:部署elasticsearch

安装前问题:

  1. 数据存在哪?
  2. 配置文件存在哪?
  3. 如果删除了容器,配置文件/数据怎么保留下来?
  4. es很耗内存,怎么做限制?
  5. 怎么实现容器内数据和宿主机数据同步?
  6. 如何实现es集群,怎么用DockerFile实现一键部署集群?

1. 安装

  1. 进入docker商店,选择需要的版本;
    https://hub.docker.com/_/elasticsearch
  2. 执行命令下载镜像;
    quxianglin@quxianglin-PC:~$ docker pull elasticsearch:7.13.1
    7.13.1: Pulling from library/elasticsearch
    7a0437f04f83: Pull complete 
    4f39cdc68a09: Pull complete 
    64236e0195a6: Pull complete 
    5a43a6ed4a9b: Pull complete 
    
  3. 启动镜像:
    可以参考官网的文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.13/docker.html
    在这里插入图片描述这篇文章写的很详细,有单机配置的,有集群配置的;
    • 配置单机使用,参数:-e “discovery.type=single-node”
      在这里插入图片描述
    • 使用Docker Compose启动多节点群集,查找这一段:
      在这里插入图片描述
    • 同步配置文件到宿主机:
      命令:-v full_path_to/custom_elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      在这里插入图片描述

2. 我的容器配置:

docker run -d -p 9200:9200 -p 9300:9300 --name es01 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /usr/local/docker/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/es01/data:/usr/share/elasticsearch/data -e "discovery.type=single-node" elasticsearch:7.13.1

配置详解:

docker run -d -p 9200:9200 -p 9300:9300 --name es01 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /usr/local/docker/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/es01/data:/usr/share/elasticsearch/data -e “discovery.type=single-node” elasticsearch:7.13.1

-d:是在后台运行;
-p 9200:9200 -p 9300:9300:将容器的9200映射到宿主机的9200端口,第一个9200是宿主机的端口,第二个9200是容器的端口;
–name es01:将容器别名为es01;
-e ES_JAVA_OPTS="-Xms256m -Xmx256m":设置容器需要的java最小内存和最大内存;
-v /usr/local/docker/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将宿主机上的/usr/local/docker/es01/config/elasticsearch.yml同步到容器的/usr/share/elasticsearch/config/elasticsearch.yml;
-v /usr/local/docker/es01/data:/usr/share/elasticsearch/data:将宿主机上的/usr/local/docker/es01/data同步到容器的/usr/share/elasticsearch/data;
-e “discovery.type=single-node” :设置成单机配置;

3. 容器结构:

quxianglin@quxianglin-PC:~$ docker exec -it es01 /bin/bash
[root@bfeb8a67d6d9 elasticsearch]# ls			## 总的目录
LICENSE.txt  NOTICE.txt  README.asciidoc  bin  config  data  jdk  lib  logs  modules  plugins
[root@bfeb8a67d6d9 elasticsearch]# cd bin		## bin目录的内容
[root@bfeb8a67d6d9 bin]# ls
elasticsearch                elasticsearch-keystore         elasticsearch-sql-cli
elasticsearch-certgen        elasticsearch-migrate          elasticsearch-sql-cli-7.13.1.jar
elasticsearch-certutil       elasticsearch-node             elasticsearch-syskeygen
elasticsearch-cli            elasticsearch-plugin           elasticsearch-users
elasticsearch-croneval       elasticsearch-saml-metadata    x-pack-env
elasticsearch-env            elasticsearch-service-tokens   x-pack-security-env
elasticsearch-env-from-file  elasticsearch-setup-passwords  x-pack-watcher-env
elasticsearch-geoip          elasticsearch-shard
[root@bfeb8a67d6d9 bin]# cd ..
[root@bfeb8a67d6d9 elasticsearch]# cd config
[root@bfeb8a67d6d9 config]# 
[root@bfeb8a67d6d9 config]# ls					## config文件的目录结构
elasticsearch.keystore  jvm.options    log4j2.file.properties  role_mapping.yml  users
elasticsearch.yml       jvm.options.d  log4j2.properties       roles.yml         users_roles
[root@bfeb8a67d6d9 config]# cd ..				## 返回
[root@bfeb8a67d6d9 elasticsearch]# cd data
[root@bfeb8a67d6d9 data]# ls					## data目录结构
nodes
[root@bfeb8a67d6d9 data]# cd nodes
[root@bfeb8a67d6d9 nodes]# ls
0
[root@bfeb8a67d6d9 nodes]# cd .. 
[root@bfeb8a67d6d9 data]# cd ..
[root@bfeb8a67d6d9 elasticsearch]# cd ..
[root@bfeb8a67d6d9 share]# cd ..
[root@bfeb8a67d6d9 usr]# cd ..
[root@bfeb8a67d6d9 /]# cd ..

4. 复制文件

## 复制配置文件
quxianglin@quxianglin-PC:~$ docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml /usr/local/docker/es01/config/elasticsearch.yml
open /usr/local/docker/es01/config/es01_elasticsearch.yml: permission denied
quxianglin@quxianglin-PC:~$ sudo chmod -R 777 /usr/local/docker/
请输入密码
[sudo] quxianglin 的密码:
验证成功
quxianglin@quxianglin-PC:~$ docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml /usr/local/docker/es01/config/es01_elasticsearch.yml
quxianglin@quxianglin-PC:~$
## 复制数据文件
quxianglin@quxianglin-PC:~$ docker cp es01:/usr/share/elasticsearch/data /usr/local/docker/es01/data
quxianglin@quxianglin-PC:~$ 

在这里插入图片描述

5. 常见错误:

  1. 错误:

/merged/usr/share/elasticsearch/config/elasticsearch.yml\" caused \“not a directory\”"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.

原因分析:在同步配置文件到宿主机时,宿主机上没有elasticsearch.yml文件;宿主机默认会创建一个elasticsearch.yml文件夹,导致文件夹和文件对应不上,这个文档也说过(https://blog.csdn.net/u013958151/article/details/103093616);
这是一个常见的错误,第一次在配置的时候基本上都会遇到,正确的做法是:先在宿主机的对应目录下新建一个elasticsearch.yml文件,并且内容不能错误,不能影响容器正常启动,因为容器就是根据宿主机上的这个配置文件运行的;

6. 问题解答

安装前问题:

  1. 数据存在哪?
  2. 配置文件存在哪?
  3. 如果删除了容器,配置文件/数据怎么保留下来?
  4. es很耗内存,怎么做限制?
  5. 怎么实现容器内数据和宿主机数据同步?

    上面已经解答了这几个问题,可以使用卷技术将配置文件和数据文件同步到宿主机上,因为是复制同步,因此删除容器,不会对宿主机的文件产生影响,再次创建容器,默认会加载宿主机上的配置文件和数据文件;
    经测试没有问题;

  6. 如何实现es集群,怎么用DockerFile实现一键部署集群?

7. 所有命令

  1. 先构建一个容器,将里面需要持久化的配置文件和数据库文件/文件夹拷贝出来,方便映射,不然程序跑不起来;

    docker run -d -p 9200:9200 -p 9300:9300 --name es01 -e “discovery.type=single-node” elasticsearch:7.13.1

  2. 将容器内的配置文件和数据库文件/文件夹拷贝出来

    docker cp es01:/usr/share/elasticsearch/config/elasticsearch.yml /usr/local/docker/es01/config/elasticsearch.yml

    docker cp es01:/usr/share/elasticsearch/data /usr/local/docker/es01/data

  3. 删除容器,重新构建带配置关系的容器

    docker rm -f es01

    docker run -d -p 9200:9200 -p 9300:9300 --name es01 -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -v /usr/local/docker/es01/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /usr/local/docker/es01/data:/usr/share/elasticsearch/data -e “discovery.type=single-node” elasticsearch:7.13.1

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值