实践篇主要以各容器的挂载和附加命令为主。
本章内容
本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身
Docker => 20.10.22
接上章内容,接下来该章围绕Docker
安装并运行之RabbitMQ
、ElasticSearch
,大部分命令来源于DockerHub
官网,我们将本章分为上下俩节,为演示方便这里我们跟前一节一样新建挂载目录/install_ls
,并对对应的软件本身建立目录,新建过可以无视。
mkdir -p /install_ls/rabbitMQ /install_ls/elasticSearch
Docker安装并运行RabbitMQ
一提到消息队列,最先想到的就是其最大的优势解耦
,在分布式场景下多用于分布式系统之间通信,消息队列应用有很多,比如RocketMQ
、kafka
等,我们这里演示使用RabbitMQ
,同理我们先到DockerHub
找寻其说明文档,并创建对应挂载目录,像RabbitMQ
需要安装web
端页面可访问插件。
-
根据
DockerHub RabbitMq
说明文档创建其挂载目录,执行命令mkdir /install_ls/rabbitMQ/data
。
-
通过文档我们可以了解到
RabbitMQ
,可以通过环境变量RABBITMQ_DEFAULT_USER
与RABBITMQ_DEFAULT_PASS
指定账号与密码,当然也可以不指定默认为guest / guest
。 -
创建并启动
RabbitMQ
容器,执行命令。docker run -d \ -p 15673:15672 \ -p 5673:5673 \ -v /install_ls/rabbitMQ/data:/var/lib/rabbitmq \ -e RABBITMQ_DEFAULT_USER=laocat \ -e RABBITMQ_DEFAULT_PASS=laocat \ --name rabbit-m-3.9 \ rabbitmq:3.9-management
我们这里使用了RabbitMQ
插件版本,无需进入容器内部去开启插件,当然小伙伴们也可以使用非插件版本,官网也对此进行了说明。
这里可以看到我们的容器已经正常启动了。
-
通过IP加端口我们访问该容器,输入我们配置的账号和密码,可以看到
RabbitMQ
容器正常启动并运行。
※ RabbitMQ
容器除了需要备份挂载目录外,还需要注意其内存的分配是否合理,当然也少不了安全方面账号与密码的复杂等级。
Docker安装并运行ElasticSearch
ElasticSearch
我想我不用过多介绍,一个分布式、高扩展、高实时的搜索与数据分析引擎;说来话长,16年当时的公司项目就用到了ElasticSearch
,用ElasticSearch
来进行商品的搜索,当时国内并没有与之相关的任何博客、文档;不用说也清楚攻克其有着不小的困难,我硬着头皮苦笑着接下活来,作为一个还没有现在实力水平3/1的我,在接下来的一周内没日没夜的查阅各种国外资料,服务器上部署一了一次又一次,最终在一个星期后的周一晚上10点30分左右,我看着项目的控制台输出了我调用其API
后的正确结果,兴奋的叫出声来 ~,后来便抓紧时间的补了博文,哈哈哈 ~,现在看看当时的博文,是真的不会表达啊 ~(虽然现在也不咋地,狗头 ~)。
言归正传,今天我们部署的版本是8.6.0
,单机版 ~,当时我写博文的版本还是2.4.0
,通过DockerHub
官网我们可以看到其文档中说明需要新建Docker network
,我们这里并不会对所有的容器进行网络分组,也不会部署其相应产品logstash
与Kibana
,所以并不需要创建网络,后续章节会专门进行这块的延伸;
-
通过官网与
ElasticSearch
官方Dockerfile
我们可以看到其工作目录为/usr/share/elasticsearch
,但官方并没有挂载数据目录,所以我们这里不需要新建任何数据挂载目录,前边新建的挂载目录也可以删掉,哈哈 ~ 实时写博文,我也没想到它没有挂载目录。
-
ElasticSearch
基于java
,故需要我们设置堆的大小,同时还需要设置其为单机模式启动,可以通过官网找到对应环境变量,ES_JAVA_OPTS
可以设置堆的大小,discovery.type
可以设置其启动模式。 -
创建并启动
ElasticSearch
容器。docker run -d \ -p 9200:9200 \ -p 9300:9300 \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ --name es8.6 \ elasticsearch:8.6.0
-
访问
ElasticSearch
容器可以通过curl ip+port
来验证是否启动运行正常,也可以通过安装插件来访问(ElasticSearch-Head
)这里就不展开插件方式了,还可以通过网上的GUI
插件来进行验证,当然最简单的是通过浏览器访问容器的ip+port
来验证,我这里发现访问不到该实例,突然就想起了18年再写ES
时考究到新的版本不再支持远程访问,我们执行命令docker exec -it es8.6 /bin/bash
进入容器内部,看看到底是不是因为这个原因,查看配置文件,发现并不是这样,突然我看到了配置文件跟原来版本的不同,多了security
模块,查看其官方博客发现,8.0
的es
提供了一个简单的安全功能,原来如此。
-
我们将
http
访问改为https
,会发现需要账号密码登录,我们通过官方博客查询后,得到该账号密码就在初始化启动时的日志里,我们停止删除该容器,修改创建并启动容器的命令,为其启动时提供一个可交互的终端。docker run -d \ -p 9200:9200 \ -p 9300:9300 \ -e ES_JAVA_OPTS="-Xms512m -Xmx512m" \ -e "discovery.type=single-node" \ --name es8.6 \ -it elasticsearch:8.6.0
-
执行
docker exec -it es8.6 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
将会重新生成elastic
账户的密码。
-
通过
https
访问,输入第6环节账号密码,请求成功,es
启动完成!!!
※ es
版本的不同导致容器的启动也会有所不同这点需要格外注意,避免踩坑~,对于es
生产环境部署,建议集群化部署,而非单机部署,另外要注意修改linux
一些配置参数,以适配es
,本文就忽略不计了。
☆ 参考文献:
【Elastic Stack 8.0 安装】
https://elasticstack.blog.csdn.net/article/details/122874932
【Install Elasticsearch with Docker】
https://www.elastic.co/guide/en/elasticsearch/reference/8.6/docker.html
\
◎ 文中所用到的资源链接:
【Docker Hub RabbitMQ】
https://hub.docker.com/_/rabbitmq
【Docker Hub ElasticSearch】
https://hub.docker.com/_/elasticsearch
【ElasticSearch 官方 Dockerfile】
https://github.com/elastic/elasticsearch/blob/main/distribution/docker/src/docker/Dockerfile
【ElasticSearch 多节点部署步骤】
https://www.elastic.co/guide/en/elasticsearch/reference/8.6/docker.html#docker-cli-run-dev-mode