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:latestcontainer_name: portainerports:- "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 xxxxports:# 对外暴露端口号为16379- 16379:6379# 从节点slave1:image: rediscontainer_name: redis-slave-1ports:# 对外暴露端口号为16380- 16380:6379# 启动redis 从属于容器名为 redis-master的redis,端口号为容器端口号而不是对外映射端口号,设置连接密码,连接主节点的密码command:  redis-server --slaveof redis-master 6379 --requirepass xxxx--masterauth xxxxx# 从节点2slave2:image: rediscontainer_name: redis-slave-2ports:- 16381:6379command: 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-1ports:# 端口映射- 26379:26379# 启动redis哨兵command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:# 哨兵1的sentinel.conf和宿主文件位置映射- /app/cloud/redis/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.confsentinel2:image: rediscontainer_name: redis-sentinel-2ports:- 26380:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- /app/cloud/redis/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.confsentinel3:image: rediscontainer_name: redis-sentinel-3ports:- 26381:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- /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部署完成了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】基于blind-watermark库添加图片盲水印

blind-watermark 是一个用于在图像中添加和提取盲水印的 Python 库。盲水印是一种嵌入信息(如水印)到图像中的方法,使得水印在视觉上不可见,但在需要时可以通过特定的算法进行提取。以下是如何使用 blind-watermark 库来添加和提取…

OCR图片中文字识别(Tess4j)

文章目录 Tess4J下载 tessdataJava 使用Tess4j 的 demo Tess4J Tess4J 是 Tesseract OCR 引擎的 Java 封装库,它让 Java 项目更轻松地实现 OCR(光学字符识别)功能。 下载 tessdata 下载地址:https://github.com/tesseract-ocr/…

默认ip无法访问,利用dhcp功能获取ip进行访问的方法

应用场景: ac的默认ip如192.168.1.1在pc与ac的eth2以后网口直连无法ping通,而且pc改为dhcp自动获取ip也获取不到ip地址,无法进行web配置和命令行操作。 原因是ac或其他设备被修改了默认ip或者端口vlanid,现在的端口vlan对应子接…

Unity3D 基于GraphView实现的节点编辑器框架详解

前言 在Unity3D游戏开发中,节点编辑器是一种强大的工具,它允许开发者以可视化的方式创建和编辑复杂的逻辑和流程。Unity提供了一个强大的UI工具包——GraphView,它使得创建自定义节点编辑器变得相对简单。本文将详细介绍如何使用GraphView实…

Springboot日志打印、SpringBoot集成Log4j2(附源码)、异步日志

文章目录 一、Log4j2介绍1.1、常用日志框架1.2、为什么选用log4j2 二、Log4j2整合步骤2.1、引入jar包2.2、配置文件2.3、配置文件模版 三、配置参数简介3.1、日志级别3.2、日志格式(PatternLayout)3.3、Appenders组件列表3.3.1、Console3.3.2、File3.3.3…

2025-01-03 同步

视野同步AOI 1.视窗同步(独立镜头)2.九宫格3.灯塔(九宫格的优化版)4.四叉树5.十字链表 1.视窗同步(独立镜头) SLG或RTS类型游戏一般用这种方法来实现。 两者还有细微的区别: RTS 对于即时性的要求很高,选手会经常切屏来观看游戏信息。所以通常会直接采…

uniapp:跳转第三方地图

1.跳转第三方高德地图 //跳转地图 toMap(item){uni.navigateTo({url: (window.location.href https://uri.amap.com/navigation?to${item.lng},${item.lat},${item.shopName}&modecar&policy1&srchttps://gawl.gazhcs.com/wap/index.html&callnative0)}) },…

系统设计——大文件传输方案设计

摘要 大文件传输是指通过网络将体积较大的文件从一个位置发送到另一个位置的过程。这些文件可能包括高清视频、大型数据库、复杂的软件安装包等,它们的大小通常超过几百兆字节(MB)甚至达到几个吉字节(GB)或更大。大文…

STM32-笔记32-ESP8266作为服务端

esp8266作为服务器的时候,这时候网络助手以客户端的模式连接到esp8266,其中IP地址写的是esp8266作为服务器时的IP地址,可以使用ATCIFSR查询esp8266的ip地址,端口号默认写333。 当esp8266作为服务器的时候,需要完成哪些…

Tailwind CSS 实战:性能优化最佳实践

在现代网页开发中,性能优化就像是一场精心策划的马拉松。记得在一个电商项目中,我们通过一系列的性能优化措施,让页面加载时间减少了 60%,转化率提升了 25%。今天,我想和大家分享如何使用 Tailwind CSS 进行性能优化。 优化理念 性能优化就像是在打磨一块璞玉。我们需要通过各…

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具)

ArcGIS JSAPI 高级教程 - 通过RenderNode实现视频融合效果(不借助三方工具) 核心代码完整代码在线示例地球中展示视频可以通过替换纹理的方式实现,但是随着摄像头和无人机的流行,需要视频和场景深度融合,简单的实现方式则不能满足需求。 三维视频融合技术将视频资源与三维…

小程序组件 —— 25 组件案例 - 商品导航区域

这一节主要实现商品导航区的结构和样式,商品导航区没有新的知识点,主要使用之前学习的三个组件: view:视图容器iamge:图片组件text:文本组件 商品导航区由五个商品导航来组成,每一个视频导航都…

【Ubuntu】安装华为的MindSpore

目录 1 安装Anaconda 2 更换国内源 3 安装MindSpore 1 安装Anaconda 2 更换国内源 具体方法如下: 打开命令行 cmd 工具,输入以下命令。 ① Conda 换源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ c…

AWS EMR基础知识

EMR Overview 知识点:EMR是可简化大数据框架运行的托管集群平台,能以可扩展且具成本效益的方式处理和分析大量数据,应用于大数据分析、数据处理、机器学习、数据湖和数据仓库等场景。注意事项:根据业务需求选择合适的使用场景&am…

MarkDown怎么转pdf;Mark Text怎么使用;

MarkDown怎么转pdf 目录 MarkDown怎么转pdf先用CSDN进行编辑,能双向看版式;标题最后直接导出pdfMark Text怎么使用一、界面介绍二、基本操作三、视图模式四、其他功能先用CSDN进行编辑,能双向看版式; 标题最后直接导出pdf Mark Text怎么使用 Mark Text是一款简洁的开源Mar…

C# 设计模式概况

什么是设计模式 大家熟知的GOF23种设计模式,源自《Design Patterns: Elements of Reusable Object-Oriented Software》一书,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 合著,四人组Gang of Four简称GOF。总结了在面向…

内网渗透:域 Kerberos 认证机制

1. Kerberos 协议简介 Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户端/服务器应用程序提供强大的认证服务。 该协议具有以下特点: 去中心化:认证过程独立于主机操作系统,不依赖基于主机地址的信任。安全传输&a…

Cursor小试1.生成一个网页的接口请求工具

一般开发过程中,会涉及到接口的调试,往往有时候开发的电脑不是我们自己的,没有安装一些类似postman 的接口调用工具,所以发现问题或者要测试某些接口是否正常的时候会很麻烦,而且现在网上也没有找到很好的免费的网页端接口请求的网址,所以我们使用Cursor来编写这样一个小工具, …

1961-2022年中国大陆多干旱指数数据集(SPI/SPEI/EDDI/PDSI/SC-PDSI/VPD)

DOI: 10.5194/essd-2024-270 干旱指数对于评估和管理缺水和农业风险至关重要;然而,现有数据集中缺乏统一的数据基础,导致不一致,对干旱指数的可比性提出了挑战。本研究致力于创建CHM_Drought,这是一个创新且全面的长期气象干旱数…