Portainer 是一个流行的开源工具,用于在 Kubernetes、Docker、Docker Swarm 和 Azure ACI 环境中管理容器。它提供了一个图形用户界面(GUI),使得用户可以通过直观的界面来执行容器管理任务,如查看容器状态、管理日志、网络、卷和技术栈等。
1. 安装部署容器
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
安装完成后访问:http:ip:port。
2. 图形化界面
图形化界面更加直观。
2.1 设置登录用户
第一次访问网站会让设置用户名和密码,以后的登陆都需要这个账号:
2.2 添加环境
进入环境添加,将宿主机的docker添加为本地环境:
查看portainer管理的docker环境 :
2.3 容器状态
存在镜像:
运行容器:
容器详细情况:
点击可以查看日志:
Console可以直接进入容器内部进行操作:
出现该错误可能是portainer版本与docker版本不兼容,docker版本太高,api没有适配,正常是:
Stats可以查看使用的资源情况:
2.3 私有仓库 
将搭建的私有仓库添加进去。
3. 测试
搭建一主二从+三哨兵的redis集群。
3.1 docker-compose.yml
version: '3'
services:
# 主节点
master:
image: redis:6.2
container_name: redis-master
# 设置redis登录密码、从节点连接主节点的密码
command: ["redis-server", "--requirepass", "123456", "--masterauth", "123456"]
ports:
# 对外暴露端口号为16379
- 16379:6379
# 从节点
slave1:
image: redis:6.2
container_name: redis-slave-1
ports:
# 对外暴露端口号为16380
- 16380:6379
# 启动redis 从属于容器名为 redis-master 的redis
command: ["redis-server", "--slaveof", "redis-master", "6379", "--requirepass", "123456", "--masterauth", "123456"]
# 从节点2
slave2:
image: redis:6.2
container_name: redis-slave-2
ports:
- 16381:6379
command: ["redis-server", "--slaveof", "redis-master", "6379", "--requirepass", "123456", "--masterauth", "123456"]
镜像拉取不了,镜像名改为:116.198.242.56:5000/redis:6.2。或者可以搭建私有仓库。参考:GitHub拉取镜像搭建私有仓库。
3.2 集群状态
在portainer中可以看到
说明集群搭建成功。
测试连通:在master中set zhangsan 18,则可以在salve中get zhagnsan。
master:
salve:
代表集群通信没有问题。
3.3 搭建哨兵集群
创建专属网络:隔离区
创建一个网桥(bridge),填写名字sentinel-redis,其余默认。
进入三个redis容器界面加入sentinel-redis网络。
创建哨兵集群 :docker-compose-sentinel.yml。
version: '3'
services:
sentinel1:
image: redis:6.2
# 容器名称
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:6.2
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:6.2
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:
sentinel-redis:
external: true
配置哨兵的配置文件,可以看到哨兵容器的配置文件与宿主机的文件进行了映射,只需要在/app/cloud/redis/sentinel/路径下配置相似的三个配置文件。
只需要按需修改端口号和ip:
port 26379
dir /tmp
# master节点在bridge网络中的ip值
sentinel monitor redis-master 172.21.0.2 6379 2
# master节点密码
sentinel auth-pass redis-master 123456
sentinel down-after-milliseconds redis-master 30000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 180000
sentinel deny-scripts-reconfig yes
文件说明:redis-master 的ip通过查看容器的详细信息可以看到。
3.4 测试集群
配置好后重启哨兵集群,关掉redis-master容器,发现哨兵集群选取了另一个redis节点为master。