Portainer + Swarm 管理Docker集群

介绍

Portainer是一个Docker管理工具,它支持多种方式,我们这里只写,远程链接形式和本地形式

搭建环境

  • 服务器1 :Virmach 水牛城 RAM1.8G 2C 10GSSD(黑五机器)
  • 操作系统 :Ubuntu16.04
  • 部署环境 :LNMP1.6 (我是军哥铁粉)

服务器1:搭建Jenkins中转服务器,做代码自动构建使用
服务器2:生产环境服务器,实则测试服务器,部署代码使用
服务器3:Gogs服务器,Git版本库服务器,做代码版本控制使用

配置Portainer

开放DockerAPI端口

将需要加入Portainer管理的服务器(需要安装过Docker),打开2375端口,方便管理

创建一个备份,并编辑配置文件

1
2
cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak 
vi /lib/systemd/system/docker.service

方法一:
在ExecStart整行后面添加 -H tcp://0.0.0.0:2375,有的时候他可能不止一行,则在最后面增加这一段即可,如下

2.png
2.png

:wq 保存退出

方法二(推荐):
本方法并不适用于所有的Docker版本

1
vi /etc/docker/daemon.json

复制以下内容

1
2
3
4
5
6
{
"hosts": [
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
]
}

配置完后重启Docker

1
2
systemctl daemon-reload 
systemctl restart docker

这里推荐大家使用iptables防火墙限制一下2375端口的访问,如果将2375暴露在公网则可能出现一系列安全问题,如果是国内的腾讯或者阿里,则可以直接在后台配置安全组,安全组里限制 指定IP访问指定端口即可,如果将2375暴露在外,则可能受到黑客恶意攻击!

如果不是国内机器,也可以通过iptables限制访问

1
2
3
4
iptables -I INPUT -s 107.173.XXX.XXX -p tcp --dport 2375 -j ACCEPT
systemctl iptables.service save
systemctl restart iptables.service
# systemctl stop iptables.service 如果配置有误可以停止iptables尝试

非常不推荐直接将2375暴露在公网,秒被黑~

配置后的效果如下图

3.png
3.png

安装Portainer

创建数据

1
docker volume create portainer_data

创建Portainer并运行

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

执行后访问 http://ip:9000即可看到

1.png
1.png

刚创建完会提示创建一个管理员用户,按照提示创建即可

选择创建Docker时使用Remote,远程连接,按下图填写

4.png
4.png

添加完成后如下图,点击访问创建好的节点则可以操作里面的内容

5.png
5.png

创建Swarm集群

在管理节点上增加Swarm集群manager节点

1
2
docker swarm init --advertise-addr [IP ADDRESS]
# 例如 docker swarm init --advertise-addr 107.173.XXX.XXX

返回结果如下,为了安全,关键位置已打码

1
2
3
4
5
6
7
Swarm initialized: current node (mjjrpuemaukx5a185iqd54mka) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-1zd********2oci43nbf1jjhlng8k********fhfzqw2-1ywv79qnvmlb*******h3gs35r 107.173.XXX.XXX:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

当Manager节点增加完成后,可以在子节点中输入上面提示的命令以worker形式加入集群

1
docker swarm join --token SWMTKN-1-1zd********2oci43nbf1jjhlng8k********fhfzqw2-1ywv79qnvmlb*******h3gs35r 107.173.XXX.XXX:2377

子节点加入成功后可以在父节点中查看子节点信息

1
docker node ls

6.png
6.png

如果在Portainer增加manager节点,则会自动出现 Swarm 和 Service选项,如图

7.png
7.png

结语

本次搭建过程就基本完成了,我们可以通过Portainer管理之前搭建的一系列环境,至此,一套简单的公司架构就完成了,生产环境也可以做到实时构建,只需要在Gogs上面发布版本就可以了,选择手动构建,构建时选择版本号即可,这样做的好处是如果正式环境有bug时可以随时回滚到稳定版本,当然,发布版本也是建立在测试完后的场景!