IT/DevOps

[Docker] 모든 image 삭제(feat. windows)

알 수 없는 사용자 2023. 10. 26. 06:07
반응형

도커에서 이미지 단건을 삭제하려면 아래 명령어로 삭제하면 된다.

docker rmi httpd #(이미지명)

그러나 실행중인 컨테이너의 이미지는 삭제할 수 없다.

이럴 땐 실행중인 컨테이너를 종료 시키고 삭제한 다음 이미지를 삭제해야 한다.

역시나 귀찮다.. 한방에 아래명령어를 복붙해서 컨테이너 종료, 삭제, 이미지 삭제를 할 수 있다.

windows의 경우 Power Shell에서 가능

docker stop $(docker ps -q)	#실행중인 모든 컨테이너 종료
docker rm $(docker ps -a -q)	#종료된 모든 컨테이너 삭제
docker rmi if $(docker images -q)	#모든 이미지 삭제

결과

테스트니까 위 명령어로 이미지 전체를 삭제 했지만 실제 운영단계에서는 각별히 주의해서 사용해야 한다.

아래처럼 특정 이미지는 제외한 다음 삭제하거나..

마치 리눅스에서 rm -rf * 이것과 같이 정말 무서운 명령어다. 😭

docker rmi $(docker images -q | grep -v '이미지1' | grep -v '이미지2' | grep -v '이미지3')
docker rmi $(docker images -q | grep -v -E '이미지1|이미지2|이미지3')

3줄짜리 명령어 한줄로 정리

이 이상 길어질 경우 가독성이 좋지 않을 듯 싶다.

docker stop $(docker ps -q) && docker rm $(docker ps -aq) && docker rmi $(docker images -q)

현재 내 윈도우 파워쉘에서 위 명령어의 "&&"는 지원하지 않는 토큰이라고 나와서 아래명령어로 수정했다.

docker stop $(docker ps -q); docker rm $(docker ps -aq); docker rmi $(docker images -q)

";"과 "&&"의 차이는 앞의 명령어의 정상 종류여부에 따라 뒤 명령어가 실행되고 안되고 차이다.

"&&"는 앞의 명령어가 정상 종료되었을 경우에만 뒤 명령어가 실행되고 앞의 명령어가 정상 종료가 안되면 뒤 명령어는 실행되지 않는다.

반면 ";"는 앞의 명령어의 정상 종료와 상관없이 순차적으로 명령어를 실행한다.

지금은 예제니까 ";"를 그냥 사용했다.

외울 필요 없이 메모장에 적어놓고 복붙해서 사용하면 된다.

구글링 해보니 PowerShell 7버전에서는 "&&"가 지원된다고 해서 해보니 아래처럼 잘 삭제가 되었다.

아래 깃허브에서 "powershell core"로 검색해서 다운로드 받아 설치하면 된다.

https://github.com/PowerShell/PowerShell

 

GitHub - PowerShell/PowerShell: PowerShell for every system!

PowerShell for every system! Contribute to PowerShell/PowerShell development by creating an account on GitHub.

github.com


개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

틀린 점 있을 경우 댓글 부탁드립니다.

reference: https://www.youtube.com/watch?v=dZ89MJZ4vJw

반응형