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

3303b601f13593eff6cb7db076aa6ec3.png

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

docker安装

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

36fdbc3df99d516c1b4c5f3470966770.png

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

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

准备工作

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

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

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

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

f8bf282d1ca3c38b7738ba2eccc79c03.png
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,设置容器的 limit
    ulimits:
      memlock:
        soft: -1
        hard: -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
    # 指定ip
    networks:
      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,设置容器的 limit
    ulimits:
      memlock:
        soft: -1
        hard: -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
    # 指定ip
    networks:
      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,设置容器的 limit
    ulimits:
      memlock:
        soft: -1
        hard: -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
    # 指定ip
    networks:
      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命令查看容器信息

986b13ec95a1c0c9947f71c0ca29a3b3.png

cefa1b40b001559ecb96514504742f8a.png

可以查看log,使用命令

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

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

95a5ff44ff71733b1dafcc059493e69c.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值