因为有查询sql的需求,我们找了adminer这个docker image然后部署到k8s上,这样就可以很方便的在浏览器端访问Mysql了。但由于公司内部的一些policy问题,经常会要求我们升级系统,然后这次升级adminer的task又交由我来做, 趁此机会也学习了一下如何修改镜像然后重新生成新的镜像,这里记录一下。
1. 拉镜像
docker pull adminer:4.8.1
2. 本地启动container
docker run -it adminer /bin/sh
上面这个命令其实是启动adminer并进入容器内部. admimer底层依赖的是linux alpine,所以只能通过apk来更新和安装软件包, 依次执行以下两个命令。
apk update # 根据远程镜像源更新本地仓库中的所有软件包索引(通常在更新/安装软件包前先更新索引)
apk upgrade # 从仓库中安装所有可用的软件包升级(升级本地已安装的软件包及其依赖项)
3. 生成新镜像
第二步apk更新完成后退出容器,然后docker pa -a获得刚刚exit的容器的id,然后执行
docker commit -m "comment" 容器id [REPOSITORY[:TAG]], 这个命令其实就是根据container重新打一个image,因为在容器内已经升级过软件包了,所以这个最新的image就可以push到docker仓库了。
本来以为到这儿就万事大吉,直接把这个最新的docker image部署就完事,但是后来发现还是报vulnerability问题,得,看来白忙活一趟,但是那些系统底层的东西我也看不懂呀,所以当时就找了个笨办法,去docker hub中搜索 adminer,看看哪个adminer符合我们要求,实在不行就只能自己搞一个base ubuntu或者centos的adminer镜像了。但是最后也算比较幸运,被我找到一个,下图圈出来了,然后就重新操作上面几个步骤,最终完美解决这个问题。