Docker Swarm(十)Portainer 集群可视化管理

前言

搭建好我们的容器编排集群,那我们总不能日常的时候也在命令行进行操作,所以我们需要使用到一些可视化的工具,Docker图形化管理提供了很多工具,有PortainerDocker UIShipyard等等,本文主要介绍Portainer

Portainer是一个开源、轻量级Docker管理用户界面,基于Docker API,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、

Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。

单机运行

如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即可启动容器,来管理该机器上的docker镜像、容器等数据。

  • 下载镜像

docker pull portainer/portainer
  • 创建数据卷

docker volume create portainer_data
  • 运行容器

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

参数说明:

-d:容器在后台运行;

-p 9000:9000 :宿主机9000端口映射容器中的9000端口

-v /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;

-v portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;

  • 查看容器进程

docker ps -l
CONTAINER ID        IMAGE                COMMAND            CREATED            STATUS              PORTS                    NAMES
439cc8a6d44a portainer/portainer "/portainer" 13 seconds ago Up 13 seconds 0.0.0.0:9000->9000/tcp amazing_clarke
  • 访问服务

访问方式:http://IP:9000 ,首次登录需要注册用户,给用户admin设置密码,如下图:

Docker Swarm(十)Portainer 集群可视化管理

单机版本选择“Local",点击Connect即可连接到本地docker,如下图:

Docker Swarm(十)Portainer 集群可视化管理

集群运行

更多的情况下,我们会有一个docker集群,可能有几台机器,也可能有几十台机器,因此,进行集群管理就十分重要了,Portainer也支持集群管理,Portainer可以和Swarm一起来进行集群管理操作。

在管理节点执行以下操作:

  • 下载镜像

docker pull portainer/portainer
  • 创建数据卷

docker volume create portainer_data
  • 创建网络

docker network create --driver overlay --attachable portainer_agent_network
  • 创建portainer代理

docker service create \
--name portainer_agent \
--network portainer_agent_network \
--mode global \
--constraint 'node.platform.os == linux' \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes \
portainer/agent
  • 创建portainer服务

docker service create \
--name portainer \
--network portainer_agent_network \
--publish 9000:9000 \
--replicas=1 \
--constraint 'node.role==manager' \
--constraint node.hostname==manager-node \
--container-label com.docker.stack.namespace=portainer \
--mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock \
--mount type=volume,src=portainer_data,dst=/data \
portainer/portainer \
-H unix:///var/run/docker.sock

参数说明:

-publish 9000:9000 :宿主机9000端口映射容器中的9000端口

-mount type=bind /var/run/docker.sock:/var/run/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中;

-mount type=volume portainer_data:/data :把宿主机portainer_data数据卷挂载到容器/data目录;

--constraint node.role==manager 指定容器运行在管理节点上.

--constraint node.hostname==manager-node 指定容器运行在管理节点manager-node上.

--container-label com.docker.stack.namespace=portainer 是为了prometheus+grafana能通过stack标签查看监控数据,建议今后不以stack方式部署的服务都加上com.docker.stack.namespace标签。

  • 访问服务

访问方式:http://IP:9000 ,首次登录需要注册用户,给用户admin设置密码,如下图:

Docker Swarm(十)Portainer 集群可视化管理

我们进入之后可以看到这个一个界面:

Docker Swarm(十)Portainer 集群可视化管理

  • 仪表盘和Swarm

仪表盘展示了Swarm集群的信息:

Docker Swarm(十)Portainer 集群可视化管理

注意CPU 处为4、总内存为16.4 GB,集群内的每个节点有2个CPU且内存为8.2 GB,所以这些值为集群的总和。

点击 cluster vizualizer会进入Swarm页面, 这里有一个集群的视觉总览,唯一运行的服务是当前的Portainer:

Docker Swarm(十)Portainer 集群可视化管理

点击名称列的cluster会进入一个服务的总览页面。可以看到,有很多服务相关的信息:

Docker Swarm(十)Portainer 集群可视化管理

可以对服务进行实时的修改,包括位置约束、重启策略、添加服务标签等等。

找到 Resource limits and reservations 的位置,可以修改服务资源限制:

Docker Swarm(十)Portainer 集群可视化管理

在页面的最底部是与服务关联的任务列表:

Docker Swarm(十)Portainer 集群可视化管理

可以看到,我们有2个运行中的任务,2个节点上各有1个。点击左侧菜单中的Containers会显示一些你可能没预料到的信息:

Docker Swarm(十)Portainer 集群可视化管理

只列出了1个容器,正常应该是有2个才对。为什么呢?

我们学习了docker container命令实际上仅在运行它们的节点上进行了应用,因为Portainer是在和manager进行对话,那是docker container命令所唯一进行运行的节点。记住Portainer只是Docker API的一个网页界面,因此它与命令行中运行 docker container ls的结果相同。

  • 添加端点(endpoint)

但是我们可以将剩下的两个集群节点加到Portainer中。要进行添加,点击左侧菜单的Endpoint项。

Docker Swarm(十)Portainer 集群可视化管理

然后点击+ Add endpoint按键,点击Home会带你进入本章这部分开头处所见到的Endpoint总览页面。从下面的截图中可以看到,worker节点分别运行了三个容器,并且它们 被标记为单机版而非 Swarm:

Docker Swarm(十)Portainer 集群可视化管理

这时选择新的swarm cluster下左侧菜单中的的continers就会显示所有节点上的容器了:

Docker Swarm(十)Portainer 集群可视化管理

  • 添加私有仓库(registry)

Docker Swarm(十)Portainer 集群可视化管理

Docker Swarm(十)Portainer 集群可视化管理

扩展阅读

有关Portainer的更多信息参见:

  • 官网:https://portainer.io/
  • Portainter的GitHub地址:https://github.com/portainer/
  • 最新文档:https://portainer.readthedocs.io/en/latest/index.html
  • 模板文档:http://portainer.readthedocs.io/en/latest/templates.html
  • Portainter Agent:https://portainer.readthedocs.io/en/stable/agent.html
上一篇:Docker入门与应用系列(九)图形界面管理之Portainer


下一篇:Cannot resolve external dependency com.android.support:multidex:1.0.0