前面讲了一个基础镜像需要通过哪些步骤才能被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命令,可以在镜像列表中找到这个了。
创建新的容器
docker run -itd -p 11001:22 ubuntu_node:1.0 /bin/bash
通过Jenkins创建节点去连接这个容器,发现无法连接:
经过研究是机器上ssh服务没启动,手动进入容器启动:
service ssh restart
重新连接后虽然有一些报错,但还是能正常连接并执行任务。
我们到这里可以接受在启动/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里面挂载点就和以前的不一样了。
确认容器正常启动后,在Jenkins创建新节点并链接,发现直接就可以正常启动。任务也是正常完成的。
后续可以结合批量操作脚本,生产不同端口的容器,即可在机器内完成大规模节点结群的应用部署。