도커에서 이미지 단건을 삭제하려면 아래 명령어로 삭제하면 된다.
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
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
reference: https://www.youtube.com/watch?v=dZ89MJZ4vJw
'IT > DevOps' 카테고리의 다른 글
[Docker] Docker volumn mount(feat. Windows 10) (57) | 2023.10.26 |
---|---|
[Docker] Docker 실행중인 container 조작(feat. Windows 10) (54) | 2023.10.26 |
[Docker] Docker container port forwarding(feat. Windows 10) (55) | 2023.10.25 |
[Docker] Docker image pull/remove(feat. Docker Hub) (55) | 2023.10.25 |
[AWS] AWS IAM 사용자로 인스턴스 생성/ssh 접속 (44) | 2023.08.21 |