绿联NAS安装Portainer容器管理平台教程(Docker)
前言
我为什么需要在有官方容器管理平台的情况下去安装额外的第三方管理平台“Portainer”呢?因为绿联系统自带的容器管理平台总感觉缺少点了什么,大概只有Portainer的一半不到的功能?我大概总结有以下缺点:
- 第一,缺少容器卷管理,意思是如果之前compose文件声明创建了全局卷的话,删除容器之后全局卷不会一起删除导致全局卷堆积在Docker的根目录下。
- 第二,缺少容器集群或k8s的管理能力,仅仅支持本地单机环境,这对于开发的网友来说,需要一个测试环境与生产环境,无法通过一个平台去管理容器,这是非常麻烦的。
- 第三,无法从自己docker仓库拉取或将镜像推送到仓库,也就是需要手动导出镜像上传到自己的容器仓库。
- 第四,其他的一些功能比较少,例如:不能查看镜像ID、镜像结构、不能创建隔离网络环境、缺少账户管理机制和容器模板等等。
- 第五,还有平台创建容器的时候很多选项参数绿联官方平台支持也不完善,比如容器重启策略、网络设置等方面。
开始吧
那么开始本期的“Portainer”安装教程,本教程基于两种方式安装Portainer。基于命令行模式、docker管理平台模式、docker-compose模式。我会标注每个命令和参数的具体含义,结合绿联NAS的环境和官方教程给出优化之后的安装命令和参数。因为绿联官方的容器管理平台通过镜像创建容器无法将docker.sock挂载到容器内部,所以无法实现。

在此之前我需要说明一个非常重要的东西,就是docker.sock。docker.sock是Docker的守护进程默认监听Unix域套接字,他是客户端与Docker进程通信的核心接口。Docker采用Client-Server架构,当执行命令时候,客户端会通过/var/run/docker.sock这个套接字向Docker守护进程发送HTTP APi请求,守护进程处理请求并返回结果。
命令行模式
首先需要启用绿联NAS系统的SSH远程连接。

之后使用MobaXterm远程连接绿联NAS,输入IP和端口号登录到该界面。

执行sudo -i提升执行权限

之后执行docker ps检查容器是否运行正常

执行如下命令,这里使用6053537网友的汉化版本,中文界面比较好理解。
docker run -d \
-p 58000:8000 \
-p 59443:9443 \
-p 59000:9000 \
--name portainer-01 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
6053537/portainer-ce:latest
这里映射三个端口8000、9443、9000,分别是代理端口、HTTPS协议端口、旧版本的HTTP协议端口。注意绿联官方已经占用宿主机的9443端口,所有不能使用9443。容器启动名称“portainer-01”,挂载映射dockers的守护进程(这个比较重要)和Portainer的数据目录(可以通过声明全局卷或者挂载到本地某个目录下)。容器运行如下图(以后演示OpenWrt):

最后通过“docker ps“命令检查容器运行状态检查是否在运行处于”Up状态“。

docker-compose模式
打开绿联的容器管理,项目——》创建项目

docker-compose的编写代码如下,使用3.8版本的compose。这里使用6053537网友的汉化版本,中文界面比较好理解,同样映射三个端口和docker的守护进程。同时可以现在CPUs的数量和内存大小,当然有些平台不支持CPU计数器无法支持分配CPUs占用(设置会导致报错)。
version: '3.8'
services:
portainer:
image: 6053537/portainer-ce:latest # 使用6053537网友汉化的最新镜像[1,2,9](@ref)
container_name: portainer
restart: unless-stopped # 容器退出时总是重启,除非手动停止
ports:
- "58000:8000" # 用于代理通信的端口[1,9,10](@ref)
- "59000:9000" # Web管理界面主要HTTP访问端口[1,2,9](@ref)
- "59443:9443" # Web管理界面HTTPS访问端口[3,9](@ref)
volumes:
- /var/run/docker.sock:/var/run/docker.sock # 挂载Docker守护进程套接字,用于管理Docker[1,2,3](@ref)
- ./portainer_data:/data # 使用命名卷持久化Portainer数据[1,2,9](@ref)
networks:
- portainer # 将服务连接到网络
cpus: '0.5' #分配CPU的使用,防止占用过多宿主机的CPU资源
mem_limit: 512M #分配内存使用,防止占用过多宿主机的内存资源
networks:
portainer: # 定义自定义网络,Compose会自动创建它(如果不存在)
driver: bridge
现在去访问Portainer吧!
在浏览器输入宿主机的IP和端口即可实现

哦,对了,给使用OpenWrt平台的网友一个知识点。在DockerMan设置中的访问控制,要将内网LAN侧的端口加入到允许访问接口当中,否则无法访问!(PS:因为本机是作为旁路代理某些流量,所以wan口的那侧也加进去了)。

创建Protainer账户

如果你前面的数据目录和守护进程映射都没有问题的话,这里能够看到如下界面:

点进去实时连接就能运维管理容器了

结尾
好了,到这里已经部署搭建好了Portainer容器管理平台,作为一种开源的轻量级容器管理平台,通过直观的Web界面简化了Docker、K8s以及容器集群环境的管理,具有如下特点:
核心功能 | 容器生命周期管理 |
镜像管理(拉取、推送、删除)、网络配置与管理、存储卷管理 | |
堆载部署(通过Docker Compose文件部署多容器应用) | |
用户与团队管理、基于角色访问控制 | |
主要特点 | 直观的Web界面,图像化操作,适合入门学者 |
本身作为容器运行,对系统环境要求低、干扰小 | |
多环境部署 | |
CE版本功能强大,满足极客要求 | |
典型应用场景 | 适用于测试、生产、开发环境 |
Portainer本身采用了Server-Agent架构。Server作为中心管理节点,提供Web界面和APi接口,Agent部署在各个节点上,负责与实际容器引擎通信并收集数据吗,这种设计使得Portainer能够从一个统一的界面管理不同的容器或者集群。

发表回复