通过在奴隶jenkins壳清洗docker集装箱

我们有一个场景,我们build立一个使用多个docker图像和容器的产品。 我们的Jenkins环境构build各个组件,将它们打包到容器中,然后(通常)将它们部署到testing实例中。 不幸的是,让这些testing实例变得干净已经成为我遇到的麻烦了。

奴隶是Ubuntu 14.04和16.04 LTS。 Docker是这些版本的最新稳定版本(1.12.3)假设jenkins用户已经正确连接到slave设备,并且通过sudoers文件拥有sudo权限来运行docker命令。 用户也在docker组中。 由于我们从通过docker-compose创build的一组正在运行的容器开始,因此我们将容器作为以开始的Jenkinsshell脚本的forms停止

docker工人停下来

然后,我们删除这些容器和相关的卷

docker-compose rm -fv

现在是删除图像的时候了,因为我们要拍摄一组新的图像。 在这里,我的代码已经发展了,但是效果不好。

我目前执行以下操作:

dockerimagesoutput="$(sudo docker images -q | sort | uniq)" if [ ! -z "$dockerimagesoutput" ]; then sudo docker rmi "${dockerimagesoutput}" fi 

当它在奴隶上运行时,我终于结束了

 sudo docker images -q + sort + uniq + dockerimagesoutput=01b1b8ea71f4 027c45033c40 0b17fb320c4f 182d60ace820 19a515d76e88 . . . c10984351e73 c2c4b1989875 c95d5afc74e2 ca82cd3aa0d4 d0521df160d4 d99ef18f88fd e01106d204cb e0b4f8e0248d f0a4e63c158c f14a297b157d f7dbb67755a8 fe35996d49e9 ff1f30708195 + [ ! -z 01b1b8ea71f4 027c45033c40 0b17fb320c4f 182d60ace820 19a515d76e88 27f52880c6e2 2af6e3c3e3d7 . . . 8d6bfee5cecd 8f244f8ae3db 8f72d2d366e9 9393b391526a 97f2023dcc65 a4d2bb5d4d52 ab4148bd2fb9 aee91e3b71a7 b34b797e9fe6 b4d1c74da310 c10984351e73 c2c4b1989875 c95d5afc74e2 ca82cd3aa0d4 d0521df160d4 d99ef18f88fd e01106d204cb e0b4f8e0248d f0a4e63c158c f14a297b157d f7dbb67755a8 fe35996d49e9 ff1f30708195 ] + sudo docker rmi 01b1b8ea71f4 027c45033c40 0b17fb320c4f 182d60ace820 19a515d76e88 27f52880c6e2 2af6e3c3e3d7 306ad873c7d8 3258b6beb926 4890da71db50 4aa966f33a88 4f9a28709c33 524ef9a2e9fd 549a9df5d9c4 594ea008ad1c 5ac2e713a1e6 62351a723b50 688715837b4c . . . 9393b391526a 97f2023dcc65 a4d2bb5d4d52 ab4148bd2fb9 aee91e3b71a7 b34b797e9fe6 b4d1c74da310 c10984351e73 c2c4b1989875 c95d5afc74e2 ca82cd3aa0d4 d0521df160d4 d99ef18f88fd e01106d204cb e0b4f8e0248d f0a4e63c158c f14a297b157d f7dbb67755a8 fe35996d49e9 ff1f30708195 Error response from daemon: page not found 

没有办法让我知道哪个图像导致这个页面没有find错误,是吗? 还是有一个更清洁的方式来删除从我的奴隶机器的所有图像开始新鲜?

为了清理图像(请注意,这将强制清理一切),你可以使用

 docker images -qa | xargs docker rmi -f 

清理你可以使用的容器

 docker ps -qa | xargs docker rm -f 

再次,这将强制清理所有的容器,即使他们正在运行。 您可以使用–filter参数来过滤容器,即只有已退出的容器

 docker ps -qa --filter "status=exited" | xargs docker rm -f 

还有一个来自spotify, docker-gc的人的一个很好的包,它会为你照顾这个。

编辑 docker现在也有system prune命令可用。

删除所有未使用的容器,卷,networking和图像(包括悬挂和未被引用的)。

什么关于docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) ? 如果需要sudo,只需在docker之前添加即可。