为Jenkins打包一个可用的批量化节点容器镜像

133 阅读2分钟

前面讲了一个基础镜像需要通过哪些步骤才能被Jenkins节点直接配置使用,但是这样每个节点都配置过去,肯定不符合大家的预期,所以这里和大家一起研究怎么把镜像进行打包。

 

前期步骤

前期的步骤基本参照上篇文章,唯一不同的是执行容器生成的命令里面不需要-p指定端口,因为是为后续批量生产的,锁定端口影响后续使用。

重新生成容器后执行下面的命令进行提交。

docker commit -m "init ubuntu" 045159d5ca6f ubuntu_node:1.0

其中-m "init ubuntu"表示提交的信息,可以忽略;045159d5ca6f 是我的容器的id,为更好的查找,大家可以在创建容器时通过--name xxx参数给批量生产用的容器增加一个名字。

ubuntu_node是我想要生成的新的image的名字;1.0是版本标签。

此时通过docker images命令,可以在镜像列表中找到这个了。

image.png

创建新的容器

docker run -itd -p 11001:22  ubuntu_node:1.0 /bin/bash

通过Jenkins创建节点去连接这个容器,发现无法连接:

image.png

经过研究是机器上ssh服务没启动,手动进入容器启动:

service ssh restart

重新连接后虽然有一些报错,但还是能正常连接并执行任务。

 

image.png

image.png

我们到这里可以接受在启动/bin/bash的挂载文件,root用户下的.bashrc文件里加上service ssh restart/start来进行挂载启动,但是依然不够自动化。

挂载sshd服务启动

目前的容器还无法通过挂在sshd进行生成(即将后面的/bin/bash替换为/usr/sbin/sshd -D来创建容器)。经过查阅资料,只需要将/etc/ssh/sshd_config文件中的UsePAM从yes改为no即可解决这个问题。

目前的配置中还有几个配置项供大家参考:

Include /etc/ssh/sshd_config.d/*.conf

ChallengeResponseAuthentication no

X11Forwarding yes

PrintMotd no

AcceptEnv LANG LC_*

Subsystem       sftp    /usr/lib/openssh/sftp-server

 

重新提交容器生产1.1版本。

执行下面的命令创建:

docker run -itd -p 11002:22 ubuntu_node:1.1 /usr/sbin/sshd -D

此时生产的容器的COMMAND里面挂载点就和以前的不一样了。   image.png

确认容器正常启动后,在Jenkins创建新节点并链接,发现直接就可以正常启动。任务也是正常完成的。

image.png 后续可以结合批量操作脚本,生产不同端口的容器,即可在机器内完成大规模节点结群的应用部署。