场景 #
一个部署在 K8S
上的定时任务需要更新,有 Harbor
镜像仓库和 GitLab
地址可用,另可通过在部署的容器中的 code-server
暴露端口从外部访问。项目坑的地方在于:
Gitlab
版本和镜像版本不一致,一开始直接git clone
导致莫名其妙的BUG
出现第二个坑的地方在于原项目
Dockerfile
中基础镜像From
已经失效。(以下均称镜像)
起初的解决方式 #
- 修改代码后,为了构建这个包,首先在本地仓库运行测试
- 寻求丢失的镜像是否备份
- 在自己和同事没有主服务器权限情况下拉取镜像失败后,判断镜像失效
- 查看镜像构建的命令,最终指向了一个CentOS 6.x
- 从头编写
Dockerfile
,依赖版本需要自己去找,ADD
进容器,非常繁琐
最终还是成功跑起来了,但是在部署时注意到构建 Build
时间非常长,想到另一个环境类似,工作内容类似的定时任务项目
可代替性 #
- 在另一个任务的
Dockerfile
中,找到From
的其他替代品 - 运行单个镜像,发现
node
和我项目版本不对,修改代码的一些包
这样大大减少了构建时间,至于为什么会出现可替代品,以及原镜像在迁移过程中备份消失的问题,就是历史遗留问题了...
启发 #
- 在构建时发现未知的基础镜像或者其他,首先查看单步的构建过程,可以在
Harbor
中看到 - 初步方案犯了构建过程步骤过多的错误,容易犯错而且不易排查
- 由于是完成代码后,再从零开始构建环境,很容易在依赖和版本号上出问题
- 寻找类似项目,思考它的解决方式
- 下下策可以直接“继承”原来的镜像,然后进行修改
End.💖
Since you've made it this far, sharing this article on your favorite social media network would be highly appreciated! If any questions, plz contact me!
Published