Ubuntu下部署Portainer管理docker

时间:2021-03-08 21:47:04

在上一篇文章中,我们部署了Shipyard来管理docker集群,总体比较简单,而且Shipyard界面风格很简约,还是比较喜欢的,但是正如提出的node节点无法显示bug,以及该项目早已停止维护,让我不得不在另寻可靠的工具。搜索发现,Portainer是一个轻量级的管理工具,很符合的要求。

首先,我们还是要安装docker,这一步不再赘述。然后按以下步骤安装Portainer,非常简单。

主节点

安装swarm

docker pull swarm

# 创建集群
docker swarm init --advertise-addr <MANAGER-IP>

这一步完成时显示如下:
Ubuntu下部署Portainer管理docker

它显示了加入工作节点的办法。到这里,主节点就配置完成,它会默认加入本地节点。

部署Portainer

sudo docker service create \
         --name portainer \
         --publish 9000:9000 \
         --constraint 'node.role == manager' \
         --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
         portainer/portainer \
         -H unix:///var/run/docker.sock

工作节点

工作节点就按照上一步中给出的办法,加入新节点:

sudo docker swarm join --token SWMTKN-1-4zzd3zwswlix4hmxf68byzf3bds5sed2qtqgm1uao9g48tge61-9hu7w2cle8ic55ntnmqlzwuoi 192.168.56.103:2377

Ubuntu下部署Portainer管理docker
PS:注意,加入新的manager节点和worker节点都是相同的命令,但是token不一样。可以通过命令查询token:

docker swarm join-token worker/manager

如果想旧令牌无效并生成新令牌:

docker swarm join-token --rotate

这时在主节点上就可以看到各个节点的信息:
Ubuntu下部署Portainer管理docker

WEB访问

默认对外曝露9000端口,因此你只需访问http://<MANAGER-IP>:9000 就能够访问web端页面。第一次访问需要你创建用户和密码。

Ubuntu下部署Portainer管理docker

总体看,配置非常简单,而且占用的资源非常少。


其实按照创建服务的方法来部署Portainer会存在一个问题就是,它每次重启都会重新挂载一个临时目录,导致需要重复配置账号。为了解决这个问题,也为了能够同时监控多个集群,我们换一种方式。

首先需要曝露docker的2375端口:

# 备份
sudo cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak

然后编辑/lib/systemd/system/docker.service

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock  --containerd=/run/containerd/containerd.sock

然后重启docker:

systemctl daemon-reload

systemctl restart docker

然后创建一个非临时的volum给Portainer使用:


sudo docker volume create portainer_data

然后采用普通容器的方式部署Portainer:

sudo docker run -d -p 9000:9000 --name portainer --restart=always  -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

这样就ok了。

登录后,选择remote,里面Endpoint URL设为你想要监控的swarm所在主机的ip:2375即可连接,并且在左侧菜单的Endpoints中可以继续添加,从而达到一个控制台管理多个集群的目的。
Ubuntu下部署Portainer管理docker