- session
- spring boot
- sql
- @transactional
- SSL
- 데이터베이스
- DI
- PYTHON
- 자바
- 프로그래머스
- mysql
- 스프링부트
- 문자열
- java
- Git
- spring mvc
- jpa
- springboot
- nginx
- Django
- spring
- 1차원 배열
- join
- select
- spring security 6
- 스프링
- Docker
- AWS
- ORM
- string
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
개발하는 자몽
[Docker] 도커 <none>/dangling image 삭제 본문
항상 도커 컨테이너를 생성하고 삭제만 했지, 도커 이미지를 확인할 생각을 하지 않았다.
아래 명령어로 이미지 목록을 조회해 보니 엄청난 수의 `<none>:<none>` 이미지들이 있었다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none>
<none> <none>
<none> <none>
.
.
.
해당 이미지들은 많은 용량을 차지하고 있었기 때문에 지워줄 필요가 있었다. 하지만 `none`으로 태그 된 이미지들을 하나하나 지우기에는 좀... 그랬다...
그래서 바로 해당 태그들을 한 번에 지울 수 있는 방법을 검색해 봤는데, 역시나 다들 똑같은 생각을 하는 것 같다.
도커 이미지 삭제
도커 특정 이미지를 삭제할 때는 아래 명령어를 사용하면 된다. 이때 해당 이미지를 사용 중인 컨테이너가 있다면 삭제할 수 없다.
$ docker rmi image_id
`rm`은 remove, `i`는 image의 줄임말이다.
<none> image
`<none>` 이미지는 `dangling image` 라고 부르는데, 더 이상 사용되지 않는 이미지를 뜻한다. 생성 원인은 빌드 실패나 이미지 빌드 시 태그명이 중복되거나 등이 있다.
`<none>` 태그를 가진 이미지를 모두 지울 때는 아래 명령어를 사용하면 된다.
$ docker rmi $(docker images -f "dangling=true" -q)
- `-f` 옵션: `filter`를 뜻하며 `dangling=true` 필터를 지정하여, dangling 이미지 목록만 보여준다.
- `-q` 옵션: `IMAGE ID` 목록만 조회
위 명령어를 사용했을 때 아래 같은 에러가 발생할 수도 있다.
Error response from daemon: conflict: unable to remove repository reference "..." (must force) - container container_id is using its referenced image image_id
에러의 의미는 `image_id` 이미지를 사용중인 컨테이너가 실행 중이므로 삭제할 수 없다는 뜻으로, 해당 컨테이너를 중지시킨 후 다시 이미지를 삭제하면 된다.
또는 `-f/--force` 옵션을 사용하여 강제로 삭제시킬 수 있다.
$ docker rmi -f $(docker images -f "dangling=true" -q)
`-f` 옵션은 강제로 삭제하기 때문에 항상 어떤 이미지인지 확인해 보고 사용해야 한다.
prune
`prune` 명령어도 dangling 이미지를 삭제해준다. `prune` 명령어는 Docker API 1.25 이상부터 지원된다.
$ docker image prune
참고
'Architecture & Tool > Docker' 카테고리의 다른 글
[Docker] image, container, Dockerfile, docker compose, (0) | 2024.02.03 |
---|---|
[Docker] docker compose 명령어 (0) | 2023.11.17 |
[Docker/Spring] Dockerfile 작성과 Docker에서 SpringBoot 빌드하기 (0) | 2023.05.25 |
[AWS EC2/Docker] EC2 생성, EC2에 Docker 설치, Docker에 MySQL 띄우기 (0) | 2023.05.20 |