2016-11-27 4 views
1

Wir haben ein Szenario, wo wir ein Produkt, das mehrere Docker Images und Container verwendet. Unsere Jenkins-Umgebung erstellt die einzelnen Komponenten, verpackt sie in Container und stellt sie dann (normalerweise) für Testinstanzen bereit. Leider ist es zu einem Problem geworden, dass diese Test-Instanzen sauber sind, und ich habe Probleme, sie zu lösen.Reinigung docker Container über jenkins Shell auf Slave

Slaves sind Ubuntu 14.04 und 16.04 LTS. Docker ist die neueste stabile Version für diese Builds (1.12.3) Angenommen, der Benutzer jenkins ist ordnungsgemäß in das Slave-Gerät eingebunden und verfügt über sudo-Berechtigungen über die sudoers-Datei, um docker-Befehle auszuführen. Der Benutzer befindet sich ebenfalls in der Andockgruppe. Da wir mit einem laufenden Satz von Containern erstellt über Docker-compose starten, stoppen wir die Behälter als ein Shell-Skript Jenkins beginnend mit

Docker-compose stoppen

Dann entfernen wir die Behälter und die damit verbundenen Volumina mit

docker-komponieren rm -fv

Jetzt ist es an der Zeit, die Bilder zu entfernen, weil wir eine neue Reihe von Bildern an ihrer Stelle nach unten schlagen werden. Hier hat sich mein Code weiterentwickelt, aber es hat nicht gut funktioniert.

ich derzeit folgendes tun:

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

Wenn diese auf dem Slave läuft, Wind I mit

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 

up Es gibt keine Möglichkeit für mich zu wissen, welches Bild verursacht diese Seite nicht gefunden Fehler, oder? Oder gibt es eine sauberere Möglichkeit, alle Bilder von meinem Slave-Gerät zu entfernen, um neu zu starten?

+0

Sie 'xargs' verwenden können (etwas langsamer) ' Docker ps -qa | xargs docker rmi -f' – Rik

+0

Haben die Container den gleichen Hash wie die Bilder? Ich habe sie immer als zwei getrennte Entitäten betrachtet, aber vielleicht habe ich die Dokumente nicht genau genug gelesen. – Kevin

+0

Sorry mein Fehler, sie sind. Also ist es 'docker images -qa | xargs docker rmi -f' und 'docker ps -qa | xargs docker rm -f' – Rik

Antwort

1

Für Bilder Reinigung (bitte beachten Sie, dass dies erzwingen, alles aufzuräumen) können Sie

docker images -qa | xargs docker rmi -f 

verwenden, um Container aufzuräumen Sie

docker ps -qa | xargs docker rm -f 

verwenden Auch das wird alles reinigen zwingen Container, auch wenn sie laufen. Sie können die --filter Parameter verwenden, um die Behälter zu filtern, das heißt nur Behälter verlassen

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

Es gibt auch ein schönes Paket von den Jungs von Spotify, docker-gc, die für Sie von dieser Pflege nehmen.

EDIT docker jetzt hat auch die system prune Befehl zur Verfügung.

Entfernen Sie alle nicht verwendeten Container, Volumes, Netzwerke und Bilder (sowohl dangling als auch referenzierte).

0

was ist mit docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)? im Falle von sudo Notwendigkeit einfach vor docker hinzufügen.

+0

Dies entfernt den Container, aber nicht das Bild, das verwendet wurde, um es zu erstellen. Docker-Compose zieht Bilder ein, um Container zu erstellen. Ich habe die Container getötet; Hier geht es um die Bilder, die auf der Slave-Maschine verbleiben. – Kevin

0

Ich habe Jenkins docker Slave-Maschine, wo ich Bilder erstellen und es zum ECR-Repository schieben. Die obigen Befehle haben mir geholfen, alle Bilder und Container in der Slave-Maschine aufzuräumen.

  1. docker images -qa | xargs docker rmi -f (saubere Bilder)
  2. docker ps -qa | xargs Docker rm -f (clean Container)

Dank @Rik

Verwandte Themen