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 | cp /lib/systemd/system/docker.service /lib/systemd/system/docker.service.bak |
方法一:
在ExecStart整行后面添加 -H tcp://0.0.0.0:2375,有的时候他可能不止一行,则在最后面增加这一段即可,如下
:wq 保存退出
方法二(推荐):
本方法并不适用于所有的Docker版本
1 | vi /etc/docker/daemon.json |
复制以下内容
1 | { |
配置完后重启Docker
1 | systemctl daemon-reload |
这里推荐大家使用iptables防火墙限制一下2375端口的访问,如果将2375暴露在公网则可能出现一系列安全问题,如果是国内的腾讯或者阿里,则可以直接在后台配置安全组,安全组里限制 指定IP访问指定端口即可,如果将2375暴露在外,则可能受到黑客恶意攻击!
如果不是国内机器,也可以通过iptables限制访问
1 | iptables -I INPUT -s 107.173.XXX.XXX -p tcp --dport 2375 -j ACCEPT |
非常不推荐直接将2375暴露在公网,秒被黑~
配置后的效果如下图
安装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即可看到
刚创建完会提示创建一个管理员用户,按照提示创建即可
选择创建Docker时使用Remote,远程连接,按下图填写
添加完成后如下图,点击访问创建好的节点则可以操作里面的内容
创建Swarm集群
在管理节点上增加Swarm集群manager节点
1 | docker swarm init --advertise-addr [IP ADDRESS] |
返回结果如下,为了安全,关键位置已打码
1 | Swarm initialized: current node (mjjrpuemaukx5a185iqd54mka) is now a manager. |
当Manager节点增加完成后,可以在子节点中输入上面提示的命令以worker形式加入集群
1 | docker swarm join --token SWMTKN-1-1zd********2oci43nbf1jjhlng8k********fhfzqw2-1ywv79qnvmlb*******h3gs35r 107.173.XXX.XXX:2377 |
子节点加入成功后可以在父节点中查看子节点信息
1 | docker node ls |
如果在Portainer增加manager节点,则会自动出现 Swarm 和 Service选项,如图
结语
本次搭建过程就基本完成了,我们可以通过Portainer管理之前搭建的一系列环境,至此,一套简单的公司架构就完成了,生产环境也可以做到实时构建,只需要在Gogs上面发布版本就可以了,选择手动构建,构建时选择版本号即可,这样做的好处是如果正式环境有bug时可以随时回滚到稳定版本,当然,发布版本也是建立在测试完后的场景!