最近在研究服务器自动部署脚本,同时也学习一下 bash 命令的运用。现在遇到并解决了一个问题,场景是这样的:
想通过 bash 脚本自动从 coding 上下载更新脚本,更新脚本里可以从 coding 的 docker 库里拉打包好的 docker,但服务器上拉之前,要先删除原来的容器和镜像,本来是通过以下代理完成的:
1 docker kill $(docker ps -a -q)2 docker rm $(docker ps -a -q)3 docker rmi $(docker images -a -q)
这三句是把所有的容器和镜像全部删掉,后来通过 docker 加了 Portainer 来管理 docker 后,运行代码时并不想把 portainer 的容器及镜像也删掉,因此做了以下修改:
docker kill $( docker ps -a -q | grep $(docker ps -f "name=portainer-test" -q))
dockerrm $( docker ps -a -q | grep $(docker ps -f "name=portainer-test" -q))
docker rmi $( docker images-q | grep $(docker images portainer/portainer -q))
在操作的时候,把portainer 的容器及镜像排除掉。
后来,随着业务需求的增加,在我们的内部服务器上也准备通过这个脚本来更新,但内部服务器上还有个jenkins镜像,又对脚本进行了修改:
1 docker kill $( docker ps -a -q | grep -E '