前面的文章中,我们从基础镜像入手制作了一个容器,安装好需要的工具后又通过它生成了一个镜像,已经验证完成它可以被拉取使用,但这样生产的是一个类似于半永久的节点,容器在宿主机会一直存在直到有人手动删除它,而且容易受到执行过程的影响而改变了原有的样貌。
所以这里考虑到了使用Jenkins节点下方的cloud功能。
K8S的配置网上已经有很多的资料了,但对docker cloud的配置,网上一搜索就是一大堆建立docker的Jenkins和通过Jenkins生产docker镜像的教程。所以这里对docker的集群配置进行详细展示。
Jenkins与容器环境在同一个机器不用配置此项,可以掠过。
通过service docker status 命令,找到docker的服务启动点。
修改它,将其中的ExecStart行修改为ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376
此时是谁都可以访问的。公有云上可以配置访问控制,阻断大部分的恶意扫描,但还是尽量不要用默认的2375,2376作为Jenkins默认其实也要少用。在对外开放端口的生产环境一定要配置证书,加上对应的证书参数。
配置后使用systemctl daemon-reload加载配置,并使用service docker restart重启服务。
在没有任何cloud插件时,Jenkins会自动展示此类插件,里面选择Docker插件。
在configure cloud中选择添加Docker集群。
配置分为Docker Cloud details和Docker Agent templates两个部分。
主要配置集群主机的信息。
其中Docker Host URI就是前面配置的tcp连接路径,Server credentials如果有的话是个安全链接用的证书,其他的基本不用配置,如果你在URI里用的域名没有写入Jenkins hosts文件的话,需要在高级配置的Docker Hostname or IP address配置IP地址。Container Cap代表这个机器上的承载上限。
这个可以配置多个,类似于node,通常用一个镜像代表一个标签
其中的labels就是标签;name用于生产随机的容器时候的前缀;Docker Image是机器上的镜像,可以写死版本号,代表唯一的一个镜像版本,也可以不带版本号,随宿主机动态更新。
点开Registry Authentication,这个Credentials是远程docker hub的认证,只在本地拉的话不需要配置。
点开Contain settings,Docker Command代表这个镜像生成容器时候的启动命令。和前面文章中一样,这里使用/usr/sbin/sshd -D。Contain settings中的其他配置根据需要设置,可以进行桥接网络,设置资源限制,设置环境变量等操作。
Instance Capacity代表这个模板能被拉起的最大值,与其他template一起受前面大项里的Container Cap限制,甚至会受到原有机器上已经启动的容器限制。
Remote File System Root是Jenkins运行任务的目录,可以不存在,有权限的话会自己创建。
Connect method还是选择ssh,和前面节点配置一样。
Stop timeout是容器执行完任务要被释放的时间限制。
Pull strategy 拉取策略,选用Never pull就会保持不变,选择Pull once and update latest就会更新,配置更新的话一定要配置远程的docker hub证书。
配置完后建立任务选择这个label进行运行,能够看到右侧运行位置是在docker_1-0045skks6e35f,代表配置是成功的
目前做出来的镜像只能是root用户登录,哪怕增加了别的用户和其ssh配置,估计和其他的配置有关。
在配置成功docker集群的detail部分后,就可以在系统管理中下方的docker查看服务器的活动容器和镜像。