1. 简介

前面文章我们讲Docker、Docker Compose和Docker Swarm都是在Linux系统上手工命令行去操作,在第一次安装的时候可以命令行,以后运维和CICD流程操作中,如果还要命令行去各个节点操作,操作就麻烦了,工作效率就低了,我们需要有一个集中管理的系统,而且是web界面化的管理系统,而且是开源的,Portainer正是这样的系统。

Portainer是一款开源的容器管理工具系统,旨在简化Docker容器和Kubernetes集群的管理。通过提供一个直观的Web界面,Portainer可以帮助用户轻松地创建、管理和维护容器,而无需使用复杂的命令行工具。

Portainer系统开源代码托管在github上:https://github.com/portainer/portainer。

Portainer提供两个版本:社区版和企业版。

Portainer Community Editionis a lightweight service delivery platform for containerized applications that can be used to manage Docker, Swarm, Kubernetes and ACI environments. It is designed to be as simple to deploy as it is to use. The application allows you to manage all your orchestrator resources (containers, images, volumes, networks and more) through a ‘smart’ GUI and/or an extensive API.

Portainer consists of a single container that can run on any cluster. It can be deployed as a Linux container or a Windows native container.

Portainer Business Editionbuilds on the open-source base and includes a range of advanced features and functions (like RBAC and Support) that are specific to the needs of business users.

2. 架构

Portainer由两个元素组成:Portainer服务器和Portainer代理。两者都作为轻量级容器在现有的容器化基础设施上运行,如Docker Swarm集群上运行。Portainer代理应该部署到集群中的每个节点,并配置为向Portainer Server容器报告。

单个Portainer服务器将接受来自任意数量Portainer代理的连接,从而能够从一个集中式接口管理多个集群。为此,PortainerServer容器需要数据持久性。Portainer代理是无状态的,数据被运回Portainer服务器容器。

3. 安装

这里单讲社区版的安装,Portainer社区版提供三种安装方式:Docker standalone、Docker Swarm、Kubernetes。官网文档:Install Portainer CE – Portainer Documentation。

其实安装都及其简单,我的开发环境安装采用Docker Swarm方式,这里简述一下。我们采用docker-compose.yml来编排安装最方便了:

version: '3.2'services:agent:image: portainer/agent:2.0.0volumes:- /var/run/docker.sock:/var/run/docker.sock- /var/lib/docker/volumes:/var/lib/docker/volumesnetworks:- agent_networkdeploy:mode: globalplacement:constraints: [node.platform.os == linux]portainer:image: portainer/portainer-ce:2.0.0command: -H tcp://tasks.agent:9001 --tlsskipverifyports:- "9000:9000"- "8000:8000"volumes:- portainer_data:/datanetworks:- agent_networkdeploy:mode: replicatedreplicas: 1placement:constraints: [node.role == manager]networks:agent_network:driver: overlayattachable: truevolumes:portainer_data:

我的Docker版本是:

$ docker version
Client: Docker Engine – Community
Version:20.10.16
API version:1.41
Go version:go1.17.10

Server: Docker Engine – Community
Engine:
Version: 20.10.16
API version: 1.41 (minimum version 1.12)
Go version:go1.17.10
containerd:
Version: 1.6.4

安装执行一行命令即可:

docker stack deploy -c docker-compose.yml portainer

可以在docker swarm管理节点执行命令来查看,你将看到两个service:

docker service ls| grep portainer

4. Web管理

安装完毕之后,我们可以访问其Web管理系统地址,例如我的开发环境url地址是:http://192.168.1.10:9000/。

从上图可以看到,Portainer可以对stack、service、container、image、volume、networks、config等进行界面化集中管理,这样大大简化了我们对Docker Swarm集群的运维工作。

5. 实用工具

虽然说运维管理要用Portainer Web管理系统来进行操作,但是CI/CD管道流水线的一切自动化操作,还是需要通过Linux命令行实用工具,可以编写Bash脚本或Python程序来自动化应用程序的安装部署。

也有好人做了一个开源portainer-stack-utils:GitHub – greenled/portainer-stack-utils: CLI client for Portainer,安装直接看官网文档,这里不累述了。最后的工具是psu:

$ psu -h
A CLI client for Portainer

Usage:
psu [command]

Available Commands:
completion Generate Bash completion scripts
config Manage configs
containerManage containers
endpointManage endpoints
helpHelp about any command
loginLog in to a Portainer instance
network Manage networks
proxyStart an HTTP proxy to an endpoint’s Docker API
secret Manage secrets
service Manage services
setting Manage settings
stackManage stacks
status Check Portainer status
volume Manage volumes

Flags:
-A, –auth-token string Portainer auth token.
-h, –helphelp for psu
-i, –insecureSkip Portainer SSL certificate verification.
–log-format string Log format. One of text or json. (default “text”)
-v, –log-level stringLog level. One of trace, debug, info, warning, error, fatal or panic. (default “info”)
-p, –password stringPortainer password.
–settings-file stringSettings file. (default “$HOME/.psu.yaml)”
-t, –timeout durationWaiting time before aborting (like 100ms, 30s, 1h20m).
-l, –url string Portainer url.
-u, –user stringPortainer user.
–versionversion for psu

Use “psu [command] –help” for more information about a command.

我在GitLab CICD里使用,通过gitlab-runner来调用psu进行服务部署。

6. API接口

Portainer系统还提供了API接口,供我们进行二次开发管理,swagger地址:Build, Collaborate & Integrate APIs | SwaggerHub

7. 总结

Portainer是一款开源的容器管理工具系统,通过提供一个直观的Web界面,帮助我们轻松地创建、管理和维护容器,同时也提供实用工具供我们自动化操作使用,还提供API接口供我们进行二次开发管理。