背景是我司有个具复杂的工程,这个工程引用了27次submodule,用cicd测试环境开发效率很慢,因为cicd上开启了构建前清理空间,每次编译都是一次巨量的git拉取过程,编译cache也会一同清空,所以弄一次编译,二三十分钟就过去了,而且还可能二三十分钟只是解决一个开发的编译错误。时间得不偿失。
于是我有了想法。线上cicd上根据这份docker描述文件编译的
白话下这个描述文件,
好了根据这份文件,执行以下命令
sudo docker build -t fullfish/toucan -f ./Dockerfile .
-f指定了Dockerfile的路径,-t表示生成的image名字,
如果这些步骤都成功了,然后就可以用docker image ls查看到刚刚打包好的image
然后启动这个image,sudo docker run -d --rm -it --entrypoint bash fullfish/toucan
接着就可以用docker container ls查看到这个启动的container实例。
然后就可以用id或者names进入这个container,sudo docker exec -it 3bd8d0b98146 bash
或者sudo docker exec -it silly_spence bash
然后这个container里面,我们把工程代码都git下载下来,再里面把整个编译环境都搞定。比如说我的这个工程
缺失了这些个必要的第三方组件,
其中一个比较有意思的是libstdc++-static,这个包其实很隐蔽,因为我的代码是静态编译libstdc++,所以即使镜像里面有libstdc++.so也是不行的。这个缺失会在代码链接库阶段的时候报错。另一个是gcc-c++,这个其实就是centos7的gcc4.8版本。
这样镜像包根据线下cicd环境centos7镜像包加入这些必须包和gcc4.8开发环境。
好了我也在这个Dockerfile完善了一些依赖库信息。接下来我要把这个image分享给同事,怎么弄呢。就是说把这个完善的container再生成image。然后同事就可以根据这个新image做他们自己的开发环境。
用docker commit提交这个id,
sudo docker commit 3bd8d0b98146
然后用docker tag生成一个好记的名字
sudo docker tag 6e939bf3a45b toucan_dev
接下来同事就可以愉快的使用新镜像toucan_dev了,用这个镜像包进入docker开发,就不用去依赖cicd上编译调试了
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。