Docker图形化界面工具Portainer最佳实践

  • 前言

  • 安装Portainer

  • 实践-基于Portainer安装redis-sentinel部署

  • Spring Boot集成Redis Sentinel


前言

本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。

安装Portainer

编写docker-compose文件

Portainer部署的步骤比较简单,我们还是以docker-compose文件的形式完成Portainer的安装,首先我们需要需要编写的名为portainer.yml的文件,内容如下:

version: "3"
services:
  portainer:
    image: portainer/portainer:latest
    container_name: portainer
    ports:
    - "9000:9000"
    volumes:
    - /app/portainer/data:/data
    - /var/run/docker.sock:/var/run/docker.sock

完成后,我们将这个文件上传到我们的服务器即。

初始化并配置容器

将配置文件上传之后我们就可以尝试启动了,为了方便查看服务是否可以正常启动,我们还先以前台运行的方式启动,到达portainer.yml文件位置,键入前台启动命令

docker-compose -f portainer.yml up

当控制台没有输出错误,并显示正常启动后,我们分开服务器的9000端口,浏览器输入服务器ip:9000,即可进入Portainer初始化界面,它会要求我们配置用户名密码:

图片

完成账户密码初始化之后,我们点击local进行服务器本地容器管理

图片

图片

此时我们就会看到local中docker的基本信息了

图片

图片

在步入local,我们就可以按需管理容器、镜像、网络等配置信息。我们不妨点击containers查看我们服务器中当前运行的docker容器。

图片

图片

可以看到我们docker中容器的运行情况,由于portainer涉及操作很多,笔者这里就不一一演示了,感兴趣的读者可以自行查阅portainer官方文档

https://www.portainer.io/take-5

图片

图片

到上述步骤我们已经可以确定portainer安装基本成功了,我们可以回到服务器将portainer后台启动,正式使用portainer了。

docker-compose -f portainer.yml up -d

实践-基于Portainer安装redis-sentinel部署

介绍

读完上述的介绍可能读者们对Portainer还没有一个比较清晰的了解,所以笔者在这里就基于一个redis-sentinel的部署介绍一下Portainer的日常操作步骤。

首先我们来介绍一下本次部署架构,我们会基于一台服务器完成一主二从+三个哨兵的部署架构,最终效果是:

  • 当主节点更新数据之后,从节点数据也会进行同步。

  • 当我们将主节点手动停止之后,哨兵就会选举出新的master继续进行工作。

图片

图片

安装步骤
主从复制部署

首先我们先进性主从结构的部署,我们还是基于docker-compose创建一个名为redis-cluster.yml的文件配置一下主从信息,配置内容如下,笔者已将配置的含义都一一注释,读者可自行参考修改。需要注意以下两点:

安全起见,建议读者尽可能不要使用6379作为对外暴露的端口号,就算使用6379也尽可能设置一个安全的密码,避免被人下挖矿程序。

当读者复制下面的文件在服务器启动时可能会报各种语法错误,所以笔者推荐的yaml格式化在地址,读者完成配置后可以将配置粘贴到这个网站完成自动格式化。这样可以避免启动时报一些没必要的错误

version: '3'
services:
  # 主节点
  master:
    image: redis
    # 主节点名称
    container_name: redis-master
    # 设置redis登录密码、从节点连接主节点的密码
    command: redis-server --requirepass xxxx--masterauth xxxx
    ports:
    # 对外暴露端口号为16379
    - 16379:6379
  # 从节点
  slave1:
    image: redis
    container_name: redis-slave-1
    ports:
    # 对外暴露端口号为16380
    - 16380:6379
    # 启动redis 从属于容器名为 redis-master的redis,端口号为容器端口号而不是对外映射端口号,设置连接密码,连接主节点的密码
    command:  redis-server --slaveof redis-master 6379 --requirepass xxxx--masterauth xxxxx
  # 从节点2
  slave2:
    image: redis
    container_name: redis-slave-2
    ports:
    - 16381:6379
    command: redis-server --slaveof redis-master 6379 --requirepass xxxxx --masterauth xxxxx

完成后我们即可将配置上传到服务器并启动:

docker-compose -f redis-cluster.yml up

启动完成后就可以在portainer中看到一主二从出现在containers列表中

图片

以master为例,我们不妨点击log查看master节点的运行情况

图片

从输出可以看到master没有输出任何错误,说明master正常运行了。

图片

在确认每个容器都能正常启动之后,我们不妨尝试在master节点写入一些数据测试一下主从节点同步功能是否正常。

在没有portainer之前,我们进入docker容器内容用的都是使用docker exec -it 容器id bash/sh命令,有了portainer之后,我们进入容器的操作就变得非常简单了。

回到容器列表,点击redis-master进入容器管理界面

图片

点击console,进入容器终端连接界面

图片

点击connect连接进入容器

图片

然后我们就进入的容器内部,尝试使用redis-cli认证并设置一个kv值。

图片

完成上述步骤后,我们到达从节点的容器内部查阅数据可以发现,主节点数据确实同步过来了,自此我们主从复制部署基本完成。

图片

创建redis-sentinel专用网络驱动

为了确保redis-sentinel可以统一管理且和其他容器隔离,我们在部署sentinel之前需要基于Portainer创建一个自定义的brige网络。

什么是brige网络呢?其实docker容器中有以下几种网络驱动类型,不同的网络驱动类型可以使得容器和宿主机有着不同的网络关联:

  1. host: 使用docker宿主机网络

  2. bridge: 该网络支持在同一个宿主机上的各个容器实例之间的通信。bridge网络是一个独立的网络空间,在网络空间内部的各个容器实例能够直接通信。

  3. none: 是一个完全隔离的自治网络,甚至与Docker宿主机的网络都不通,必须手工配置网卡后才能够使用。加入到该网络的容器实例,往往要在后续设置中加入到其他的第三方网络。

  4. overlay: 该类型的网络适用于Docker宿主机集群中的各个独立的容器实例之间通信。

  5. macvlan: 该类型的网络适用于容器实例需要与宿主机的MAC地址直接通信,无需端口映射,也无需NAT,容器实例的eth0直接与宿主机的物理网卡通信。容器实例可以被赋予公共IP,并从宿主机外部直接访问。

所以我们这里就希望创建一个名为redis-sentinel的bridge网络将主从和哨兵节点关联起来,并且和docker中的其他容器隔离开:

图片

所以我们按照点击network,选择add network进行自定义网络创建

图片

输入名称为redis-sentinel,其余默认,然后直接点击

图片

然后直接点击create the network

图片

然后我们就可以在network列表中看到我们配置的network,自此网络redis专用桥接网络配置完成。

图片

重点来了,我们的redis主从节点现在都处于默认的网络驱动中,我们必须手动将其配置到redis-sentinel网络中,当然有了portainer,这种操作也不会很难。

我们只需要点击容器列表,找到我们的主动节点容器,然后分别进入他们的管理列表最下方,找到network选项,在network列表中找到redis-sentinel选择join network即可。

图片

创建哨兵

接下来就可以配置哨兵节点了,首先自然是创建一个名为redis-sentinel.yml的docker-compose文件配置3个哨兵:

version: '3'
services:
  sentinel1:
    image: redis
    # 容器名称
    container_name: redis-sentinel-1
    ports:
      # 端口映射
    - 26379:26379
    # 启动redis哨兵
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    # 哨兵1的sentinel.conf和宿主文件位置映射
    - /app/cloud/redis/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.conf
  sentinel2:
    image: redis
    container_name: redis-sentinel-2
    ports:
    - 26380:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - /app/cloud/redis/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.conf
  sentinel3:
    image: redis
    container_name: redis-sentinel-3
    ports:
    - 26381:26379
    command: redis-sentinel /usr/local/etc/redis/sentinel.conf
    volumes:
    - /app/cloud/redis/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
# 重点,将3个哨兵加入到redis-sentinel和主从节点建立联系
networks:
  default:
    external:
      name: redis-sentinel

从配置文件中可以看出笔者将哨兵文件和宿主文件进行关联,所以我们需要按照上面配置在app/cloud/redis/sentinel/文件夹下创建3个哨兵的配置文件sentinel.conf。

哨兵1的配置文件如下,其余哨兵配置同理,只需按需修改ip和端口号即可:

port 26379
dir /tmp
# master节点在bridge网络中的ip值
sentinel monitor redis-master 172.20.0.2 6379 2
# master节点密码
sentinel auth-pass redis-master xxxxx
sentinel down-after-milliseconds redis-master 30000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 180000
sentinel deny-scripts-reconfig yes

可以看到笔者将master节点命名为redis-master,然后网络配置为172.20.0.2这个值是从哪里来的呢?很简单,我们点击redis-master即redis主节点那个容器管理界面,到达最下方,就可以在ip address一栏看到master节点的容器ip地址,因为哨兵节点和主从节点都处于redis-sentinel这个网络中,所以170.20.0.x这个网络是互通的,在bridge模式下配置这个ip地址是完全没有问题的。

图片

完成上述步骤后我们就可以将哨兵启动

docker-compose -f  redis-sentinel.yml up

此时我们点击任意一个哨兵节点都可以看到,哨兵的状态信息,自此哨兵也部署完成了

图片

测试可用性

此时我们就可以测试哨兵是否正常工作了,我们的测试用例很简单,我们将master关闭掉,查看哨兵是否会选举出新的master顶上。

在测试前我们首先进入master容器输入info replication查看master容器中的redis是否为主节点

图片

再查看另外两个几点是否身份是否确属从节点。

从节点1:

图片

从节点2:

图片

我们通过portainer图形界面将redis-master关闭。

图片

点入任意一个哨兵日志,可以看到它监控到主节点下线,并快速选举出一个新的节点作为master上线

图片

我们根据ip地址172.20.0.3定位到是slave2这个redis,我们进入容器查看其身份,确实变为master。

图片

自此我们的redis-sentinel部署完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947395.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Wonder Dynamics技术浅析(五):虚拟场景描述解析

虚拟场景描述解析模块是 Wonder Dynamics 平台的核心组件之一,其主要功能是将用户输入的自然语言场景描述转换为机器可理解的语义表示,为后续的虚拟场景生成提供基础数据。 一、文本预处理(Text Preprocessing) 1. 目标: 对用户…

基于SpringBoot在线竞拍平台系统功能实现十一

## 一、前言介绍:1.1 项目摘要 随着网络技术的飞速发展和电子商务的普及,竞拍系统作为一种新型的在线交易方式,已经逐渐深入到人们的日常生活中。传统的拍卖活动需要耗费大量的人力、物力和时间,从组织拍卖、宣传、报名、竞拍到成…

JavaScript基础 -- 变量、作用域与内存

1 原始值与引用值 原始值就是最简单的数据,引用值则是由多个值构成的对象。在把一个值赋给变量时,JavaScript引擎必须要确定这个值是原始值还是引用值 原始值大小固定,保存在栈内存上;引用值是对象,存储在堆内存上 它…

密钥登录服务器

1. 生成 SSH 密钥对 如果您还没有生成密钥对,可以使用以下命令生成: ssh-keygen 在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件:id_rsa 为私钥,id_rsa.pub 为公钥。 在提示时,您可…

nginx 部署前端vue项目

👨‍⚕ 主页: gis分享者 👨‍⚕ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕ 收录于专栏:前端工程师 文章目录 一、🍓什么是nginx?二、🍓nginx 部署…

三大行业案例:AI大模型+Agent实践全景

本文将从AI Agent和大模型的发展背景切入,结合51Talk、哈啰出行以及B站三个各具特色的行业案例,带你一窥事件驱动架构、RAG技术、人机协作流程,以及一整套行之有效的实操方法。具体包含内容有:51Talk如何让智能客服“主动进攻”&a…

HTML-CSS-常见标签与样式

目录 一. 央视新闻排版1.1 标题1.2 正文1.3 案例1.3.1 顶部导航栏1.3.2 flex布局1.3.3 表单标签1.3.4 表单项标签1.3.5 表格 1.3 课程总结 \quad 一. 央视新闻排版 \quad \quad 1.1 标题 \quad ALTp就是用AI快速生成 标题一共有6级 \quad 1.2 正文 \quad 定义视频 定义图片 样…

【信息安全设计】系统安全设计方案,系统安全保护设施设计实施方案(Word原件)

1.1 总体设计 1.1.1 设计原则 1.2 物理层安全 1.2.1 机房建设安全 1.2.2 电气安全特性 1.2.3 设备安全 1.2.4 介质安全措施 1.3 网络层安全 1.3.1 网络结构安全 1.3.2 划分子网络 1.3.3 异常流量管理 1.3.4 网络安全审计 1.3.5 网络访问控制 1.3.6 完整性检查 1.…

基于STP文件的智能比对系统:思通数科带来高效机械制造解决方案

在机械制造领域,设计图纸与实物之间的精准对比至关重要,传统的比对方式往往需要耗费大量时间且容易出现错误,导致生产效率低下并影响产品质量。为了解决这些问题推出了一套基于STP文件的智能比对系统,结合大模型技术,集…

【51项目】51单片机自制小霸王游戏机

视频演示效果: 纳新作品——小霸王游戏机 目录: 目录 视频演示效果: 目录: 前言: 一、连接方式: 1.1 控制引脚 1.2. 显示模块 1.3. 定时器 1.4. 游戏逻辑与硬件结合 1.5. 中断处理 二、源码分析&#xff1a…

SpringMVC(五)实现文件上传

目录 1.先导jar包 2.在Springmvc.xml配置文件上传解析器 3. 编写文件上传的html页面 4.在controller包中创建FileController.class文件 5.文件下载 6.重启服务器测试 1.先导jar包 <dependency><groupId>commons-fileupload</groupId><artifactId>…

LabVIEW声波谐振管自动化测量系统

开发了一种基于LabVIEW的声波谐振管自动化测量系统。该系统利用LabVIEW的强大功能&#xff0c;实现了对声波谐振频率的精确测量&#xff0c;提高了实验数据的采集效率和准确性。系统主要应用于物理教学和科研中&#xff0c;用于研究声波在谐振管中的传播特性。 项目背景 传统的…

docker Error response from daemon

问题 Error response from daemon: Get "https://index.docker.io/v1/search?qnginx&n25": read tcp 192.168.50.233:54354->54.198.86.24:443: read: connection reset by peer Unable to find image redis:latest locally docker: Error response from d…

PHP框架+gatewayworker实现在线1对1聊天--gatewayworker说明(2)

文章目录 gatewayworker使用说明onConnect 说明 gatewayworker使用说明 gatewayworker里只需要使用Applications\YourApp下的Events.php文件。 对文件的代码进行一下改造&#xff0c;如下&#xff0c;我们只需要用到onConnect方法&#xff0c;写法固定&#xff0c;其他方法都…

【Hadoop】Hadoop安全之Knox网关

目录 一、概述 2.1 knox介绍 2.2 版本信息 二、部署 三、验证Knox网关 3.1 Hdfs RESTFULL 3.2 HDFSUI 3.3 YARNUI 3.4 HBASEUI 一、概述 2.1 knox介绍 Apache Knox网关是一个用于与Apache Hadoop部署的REST api和ui交互的应用程序网关。Knox网关为所有与Apache Hadoop…

PyCharm专项训练5 最短路径算法

一、实验目的 本文的实验目的是通过编程实践&#xff0c;掌握并应用Dijkstra&#xff08;迪杰斯特拉&#xff09;算法和Floyd&#xff08;弗洛伊德&#xff09;算法来解决图论中的最短路径问题。 二、实验内容 数据准备&#xff1a; 使用邻接表的形式定义两个图graph_dijkstra…

分布式算法(五):初识ZAB协议

文章目录 一、什么是Zookeeper二、ZAB与Zookeeper的关系为什么Zookeeper不直接使用Paxos 三、ZAB简介1.名词解释提案&#xff08;Proposal&#xff09;事务&#xff08;Transaction&#xff09;原子广播&#xff08;Atomic Broadcast&#xff09; 2.集群角色领导者&#xff08;…

word中插入zotero引用

1、参考文献末尾没有文献&#xff1f; 在文献条目要显示的地方点击“refresh” 2、参考文献条目没有悬挂缩进&#xff1f; 把“书目”添加到样式库中&#xff0c;修改样式为悬挂缩进1.5字符 3、交叉引用&#xff1f; 宏 新建一个宏 粘贴下面代码 Public Sub ZoteroLinkCita…

利用3DGS中convert.py处理自采数据

前言 3DGS源码中convert.py提供对自采数据集的处理&#xff0c;需要预先安装Colmap和ImageMagick. ubuntu22.04安装colmap 点击进入NVIDIA官网&#xff0c;查看GPU的CMAKE_CUDA_ARCHITECTURES 1、克隆colmap源码&#xff0c;并进入colmap文件夹 git clone https://github.c…

【Vue】vue-router使用addRoute动态加载路由后刷新页面404

场景&#xff1a;动态加载路由&#xff0c;点击菜单路由跳转正常&#xff0c;但刷新页面报404 原因&#xff1a;使用404做异常路由捕获 刷新页面会导致路由丢失&#xff0c;重建路由时先加载了静态路由&#xff08;包含异常路由捕获404&#xff09;&#xff0c;此时动态路由还未…