LaoCat带你认识容器与镜像(实践篇二下)

1,375 阅读5分钟

实践篇主要以各容器的挂载和附加命令为主。

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

本章内容

本文实操全部基于Ubuntu 20.04
宿主机 => linux服务器本身
Docker => 20.10.22

接上章内容,接下来该章围绕Docker安装并运行之RabbitMQElasticSearch,大部分命令来源于DockerHub官网,我们将本章分为上下俩节,为演示方便这里我们跟前一节一样新建挂载目录/install_ls,并对对应的软件本身建立目录,新建过可以无视。

mkdir -p  /install_ls/rabbitMQ /install_ls/elasticSearch


Docker安装并运行RabbitMQ

一提到消息队列,最先想到的就是其最大的优势解耦,在分布式场景下多用于分布式系统之间通信,消息队列应用有很多,比如RocketMQkafka等,我们这里演示使用RabbitMQ,同理我们先到DockerHub找寻其说明文档,并创建对应挂载目录,像RabbitMQ需要安装web端页面可访问插件。

  1. 根据DockerHub RabbitMq说明文档创建其挂载目录,执行命令mkdir /install_ls/rabbitMQ/data

  2. 通过文档我们可以了解到RabbitMQ,可以通过环境变量RABBITMQ_DEFAULT_USERRABBITMQ_DEFAULT_PASS指定账号与密码,当然也可以不指定默认为guest / guest

  3. 创建并启动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插件版本,无需进入容器内部去开启插件,当然小伙伴们也可以使用非插件版本,官网也对此进行了说明。 这里可以看到我们的容器已经正常启动了。

  4. 通过IP加端口我们访问该容器,输入我们配置的账号和密码,可以看到RabbitMQ容器正常启动并运行。

RabbitMQ容器除了需要备份挂载目录外,还需要注意其内存的分配是否合理,当然也少不了安全方面账号与密码的复杂等级。


Docker安装并运行ElasticSearch

ElasticSearch我想我不用过多介绍,一个分布式、高扩展、高实时的搜索与数据分析引擎;说来话长,16年当时的公司项目就用到了ElasticSearch,用ElasticSearch来进行商品的搜索,当时国内并没有与之相关的任何博客、文档;不用说也清楚攻克其有着不小的困难,我硬着头皮苦笑着接下活来,作为一个还没有现在实力水平3/1的我,在接下来的一周内没日没夜的查阅各种国外资料,服务器上部署一了一次又一次,最终在一个星期后的周一晚上10点30分左右,我看着项目的控制台输出了我调用其API后的正确结果,兴奋的叫出声来 ~,后来便抓紧时间的补了博文,哈哈哈 ~,现在看看当时的博文,是真的不会表达啊 ~(虽然现在也不咋地,狗头 ~)。 言归正传,今天我们部署的版本是8.6.0,单机版 ~,当时我写博文的版本还是2.4.0,通过DockerHub官网我们可以看到其文档中说明需要新建Docker network,我们这里并不会对所有的容器进行网络分组,也不会部署其相应产品logstashKibana,所以并不需要创建网络,后续章节会专门进行这块的延伸;

  1. 通过官网与ElasticSearch 官方Dockerfile我们可以看到其工作目录为/usr/share/elasticsearch,但官方并没有挂载数据目录,所以我们这里不需要新建任何数据挂载目录,前边新建的挂载目录也可以删掉,哈哈 ~ 实时写博文,我也没想到它没有挂载目录。

  2. ElasticSearch基于java,故需要我们设置堆的大小,同时还需要设置其为单机模式启动,可以通过官网找到对应环境变量,ES_JAVA_OPTS可以设置堆的大小,discovery.type可以设置其启动模式。

  3. 创建并启动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
    
  4. 访问ElasticSearch容器可以通过curl ip+port来验证是否启动运行正常,也可以通过安装插件来访问(ElasticSearch-Head)这里就不展开插件方式了,还可以通过网上的GUI插件来进行验证,当然最简单的是通过浏览器访问容器的ip+port来验证,我这里发现访问不到该实例,突然就想起了18年再写ES时考究到新的版本不再支持远程访问,我们执行命令docker exec -it es8.6 /bin/bash进入容器内部,看看到底是不是因为这个原因,查看配置文件,发现并不是这样,突然我看到了配置文件跟原来版本的不同,多了security模块,查看其官方博客发现,8.0es提供了一个简单的安全功能,原来如此。

  5. 我们将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
    
  6. 执行docker exec -it es8.6 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic 将会重新生成elastic账户的密码。

  7. 通过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