通过jenkins外壳在奴隶上清洁码头集装箱

问题描述:

我们有一个场景,我们建立一个使用多个码头图像和集装箱的产品。我们的Jenkins环境构建单个组件,将它们打包到容器中,然后(通常)将它们部署到测试实例中。不幸的是,让这些测试实例变得清洁已经成为我遇到问题时遇到的问题。通过jenkins外壳在奴隶上清洁码头集装箱

奴隶是Ubuntu 14.04和16.04 LTS。 Docker是这些版本的最新稳定版本(1.12.3) 假设jenkins用户已正确连接到从属设备,并通过sudoers文件拥有sudo权限来运行docker命令。用户也在码头组中。因为我们开始与正在运行的一套经泊坞窗,撰写创建容器,我们停止容器作为詹金斯shell脚本开始

泊坞窗,撰写停止

然后我们去掉那些容器和相关卷与

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 

有没有办法,我知道哪个图像是导致此页面未找到错误,是吗?还是有更清晰的方法可以从我的奴隶机器中删除所有图像以重新开始?

+0

您可以用'xargs'(有点慢) '泊坞窗PS -qa | xargs docker rmi -f' – Rik

+0

容器是否与图像具有相同的散列?我一直认为他们是两个独立的实体,但也许我没有仔细阅读文档。 – Kevin

+0

对不起,我是他们的错。所以它是'docker images -qa | xargs docker rmi -f'和'docker ps -qa | xargs docker rm -f' – Rik

清理图片(请注意,这将迫使清理一切),可以使用

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命令可用。

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

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

+0

这将删除容器,但不是用于创建它的映像。 Docker-compose拉入图像来构建容器。我杀了容器;这是关于奴隶机器上留下的图像。 – Kevin

我有詹金斯码头奴隶机器,我建立图像,并将其推送到ECR存储库。 上述命令帮助我清除了从机中的所有图像和容器。

  1. 码头图像-qa | xargs docker rmi -f(clean images)
  2. docker ps -qa | xargs的泊坞窗RM -f(干净的容器)

感谢@Rik