欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

docker 添加端口映射_苟且偷生的程序猿没法摸鱼了,从docker搭建elasticsearch集群开始学习...

发布时间:2025/3/15 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 docker 添加端口映射_苟且偷生的程序猿没法摸鱼了,从docker搭建elasticsearch集群开始学习... 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

最近刚换了公司,然后公司刚好使用的docker。而本人作为一个石锤的搬砖员,之前只知道搬砖们,对于这些东西确实没学过。今天在本地使用docker搭建elasticsearch集群,记录下过程,而且elasticsearch也是本人之前没学过的,最近会先学习elasticsearch使用,同时熟悉docker的使用。

docker安装

本人实在win10系统,所以安装的是Docker for Windows Installer

下载:链接:https://pan.baidu.com/s/13Gxzi-0gDqflnVRaUD0uGg 提取码:8xqh

关于docker的使用这里就不详细说了,因为网上确实有很多相关的文章。

准备工作

  • docker拉取elasticsearch镜像image
docker search elasticsearch # 查找镜像

docker pull elasticsearch # 拉取镜像,可以指定版本,如果没有指定,则默认版本

对于拉下来的elasticsearch,我们需要检查它的版本,因为最新的7.x的版本配置和之前的集群配置不一样,所以我们需要看下是哪个版本

docker images # 列出所以已经拉取的镜像列表

docker inspect 5acf0e8da90b # 通过inspect命令可以查看对应镜像的信息
  • 本地创建集群的data和logs目录,以及config目录,会挂载到docker容器,这样容器就能共享宿主机文件
|--es-cluster | |--docker-compose.yml docker-compose组件方式运行文件 | |--config 节点配置文件 | |--es01/elasticsearch.yml | |--es02/elasticsearch.yml | |--es03/elasticsearch.yml | |--data | |--es01 | |--es02 | |--es03 | |--logs | |--es01 | |--es02 | |--es03

安装elasticsearch集群

安装es集群,这里我们通过docker-compose的方式进行安装。

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

一般情况下Compose 使用的三个步骤:

1-使用 Dockerfile 定义应用程序的环境。(定制镜像) 2-使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 3-最后,执行 docker-compose up 命令来启动并运行整个应用程序。
  • 创建自定义bridge网络

Docker容器之间需要通信,所以需要知道他们的ip是什么,并且是在es的配置文件中进行配置,说明需要固定的ip,每次启动都一样,不能是动态。所以这里就自定义网络,然后启动的时候对三个节点指定固定的ip。

创建自定义网络esnet

# 该命令进行创建一个自定义的network docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 esnet--driver bridge # 指定网络模式为bridge,默认会在主机上创建一个docker0虚拟网桥 --subnet=172.19.0.0/16 # --subnet选项创建自定义子网并覆盖默认值 --gateway=172.19.0.1 # 自定义网关

这里需要注意:

我们在宿主机使用ping去查看能否ping同你自定义的网络ip,比如

ping 172.19.0.1

如果ping不同,我们可以在宿主机使用route添加路由处理,win10系统添加route操作是需要管理员权限下才可以

route add -p 172.19.0.0 mask 255.255.0.0 10.0.75.2

当然,你只要暴露了端口,宿主机ping不通容器的ip,也是可以访问的。

  • 使用 docker-compose.yml 定义构成应用程序的服务
# 指定本 yml 依从的 compose 哪个版本制定的。 version: '3'# 容器使用 esnet 网络 networks:default:external:name: esnet# yaml 配置实例 services: # es01 节点es01:# 指定容器运行的镜像image: 5acf0e8da90b# 容器名称container_name: es01# 容器总是重新启动restart: always# 添加环境变量environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m"# 覆盖容器默认的 ulimit,设置容器的 limitulimits:memlock:soft: -1hard: -1# 将主机的数据卷或着文件挂载到容器里volumes:- ./data/es01:/usr/share/elasticsearch/data- ./config/es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- ./logs/es01:/usr/share/elasticsearch/logs# 端口映射ports:- 9200:9200- 9300:9300# 指定ipnetworks:default:ipv4_address: 172.19.0.2# 允许容器中运行一些特权命令privileged: true# es02 节点es02:# 指定容器运行的镜像image: 5acf0e8da90b# 容器名称container_name: es02# 容器总是重新启动restart: always# 添加环境变量environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m"# 覆盖容器默认的 ulimit,设置容器的 limitulimits:memlock:soft: -1hard: -1# 将主机的数据卷或着文件挂载到容器里volumes:- ./data/es02:/usr/share/elasticsearch/data- ./config/es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- ./logs/es02:/usr/share/elasticsearch/logs# 端口映射ports:- 9400:9200- 9500:9300# 指定ipnetworks:default:ipv4_address: 172.19.0.3# 允许容器中运行一些特权命令privileged: true# es03 节点es03:# 指定容器运行的镜像image: 5acf0e8da90b# 容器名称container_name: es03# 容器总是重新启动restart: always# 添加环境变量environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m"# 覆盖容器默认的 ulimit,设置容器的 limitulimits:memlock:soft: -1hard: -1# 将主机的数据卷或着文件挂载到容器里volumes:- ./data/es03:/usr/share/elasticsearch/data- ./config/es03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml- ./logs/es03:/usr/share/elasticsearch/logs# 端口映射ports:- 9600:9200- 9700:9300# 指定ipnetworks:default:ipv4_address: 172.19.0.4# 允许容器中运行一些特权命令privileged: true

compose的yml文件我基本上已经注释了。上面设置了三个容器,基本上已经注释了,一看就明白。

networks 网络配置,文件中在三个容器的最前面已经配置了容器使用的自定义网络esnet,然后再容器内部配置ipv4_address固定容器ip

volumes 配置挂载,相当于docker中 -v 命令,使得容器能够共享宿主机的文件

ports 端口映射,前面是宿主机的端口映射到容器的端口

  • es集群配置文件elasticsearch.yml

三个es节点的配置差不多,这里我之展示一个es01节点的配置

# ======================== Elasticsearch Configuration =========================# ---------------------------------- Cluster ----------------------------------- # 指定集群的名字 cluster.name: es-cluster # 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算,第一次启动全新的Elasticsearch集群时,会有一个集群引导 # cluster.initial_master_nodes: ["es01"]# ------------------------------------ Node ------------------------------------ # 给master起一个名称 node.name: es01 # 该节点就得到允许,可以成为master节点 node.master: true# ----------------------------------- Paths ------------------------------------ # 数据存储 path.data: /usr/share/elasticsearch/data# 日志存储 path.logs: /usr/share/elasticsearch/logs# ----------------------------------- Memory ----------------------------------- # 绑定的ip地址和默认端口号9200 network.host: 172.19.0.2# 端口9200 默认端口也是9200 http.port: 9200# TCP的默认监听端口,默认 9300,节点内部通信port transport.tcp.port: 9300# 允许跨域配置 http.cors.enabled: true http.cors.allow-origin: "*"# --------------------------------- Discovery ----------------------------------# es7.x 之后的集群配置方式# 写入候选主节点的设备地址,在开启服务后可以被选为主节点 #discovery.seed_hosts: ["172.19.0.2:9300", "172.19.0.3:9300", "172.19.0.4:9300"]# 指定master主节点,用来初始化主节点作为引导集群.启动全新的集群时需要此参数,再次重新启动时此参数可免 # cluster.initial_master_nodes: ["es01","es02","es03"]# es7.x 之前的集群配置方式# 设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。 discovery.zen.ping.unicast.hosts: ["172.19.0.2:9300", "172.19.0.3:9300", "172.19.0.4:9300"]

注意这里我们前面镜像的版本是5.6的,所以不可以使用7.x之后的一些配置否则es启动报错。

三个节点情况,使用esnet网络,网段是172.19.0.0/16

es01: ip=172.19.0.2 端口映射=9200:9200、9300:9300 es02: ip=172.19.0.3 端口映射=9400:9200、9500:9300 es03: ip=172.19.0.4 端口映射=9600:9200、9700:9300
  • 使用 docker Compose 命令构建和运行应用
docker up -d # 构建,想在后台执行该服务可以加上 -d 参数

以上命令需要在你的docker-compose.yml文件所在位置执行,否则会提示找不到docker-compose.yml命令等信息。

最后你可以通过docker/docker-compose命令查看容器信息

可以查看log,使用命令

dockers-compose logs 容器名称 docker logs 容器id

最后通过映射端口访问一下:

总结

以上是生活随笔为你收集整理的docker 添加端口映射_苟且偷生的程序猿没法摸鱼了,从docker搭建elasticsearch集群开始学习...的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。