스택큐힙리스트
캐시가 무효화된 후 캐시된/중간 도커 이미지를 삭제하는 방법은 무엇인가요? 본문
CI-파이프라인이 있으며, 해당 파이프라인은 git 저장소에 코드 푸시를 트리거로 하여 앱을 위한 도커 이미지를 빌드합니다.
도커 이미지는 점점 커지며 여러 개의 중간 레이어로 구성됩니다. 대부분의 중간 이미지는 각 실행마다 동일하므로 도커의 캐싱 메커니즘을 많이 활용합니다.
그러나 문제는 최종 몇 개의 레이어가 각 실행마다 다르다는 것입니다. 이 레이어는 도커파일의 COPY 문으로 인해 생성되며, 빌드된 애플리케이션 아티팩트가 이미지로 복사됩니다. 아티팩트는 모든 실행마다 수정되므로 이미 캐시된 가장 아래쪽 이미지는 항상 무효화됩니다. 이러한 이미지의 크기는 각각 800MB입니다.
어떤 도커 명령어를 사용하여 이러한 이미지를 식별하고 (삭제하여) 새로운 이미지로 대체할 수 있을까요? 즉, 무효화될 때마다?
CI 파이프라인을 실행한 후에는 이를 제거하여 CI 서버에 떠다니지 않고 디스크 공간을 낭비하지 않도록 하고 싶습니다.
답변 1
만약 제대로 이해하고 있다면: 코드 푸시마다 CI 파이프라인은 새 이미지를 생성하고, 응용 프로그램의 새 버전이 배포된다. 그 결과로, 이전에 만들어진 이미지는 오래되었으므로 제거하려고 합니다. 이를 위해 다음과 같이 해야합니다:
- 오래된 이미지로 생성된 모든 오래된 컨테이너를 제거합니다.
docker ps -a
명령으로 모든 컨테이너를 표시합니다.- 아직 실행 중인 경우,
docker stop [containerID]
명령으로 오래된 컨테이너를 중지합니다. docker rm [containerID]
명령으로 컨테이너를 제거합니다.
docker rmi [imageID]
명령으로 오래된 이미지를 제거합니다.
이 프로세스가 필요한 이유를 요약하자면: 기존 컨테이너에서 이미지를 사용하지 않는 한 (중지된 컨테이너도 이미지가 필요합니다), 어떤 이미지도 제거할 수 없습니다. 따라서 먼저 이전 컨테이너를 중지하고 제거한 다음에 이전 이미지를 제거해야 합니다.
감지 부분 및 삭제 프로세스 자동화는 CI 파이프라인이 새 이미지를 생성하는 동안 생성되는 이미지 버전 및 컨테이너 이름을 기반으로 해야 합니다.
편집 1
태그가 없는 이미지와 관련이 없는 모든 이미지를 나열하려면 다음 명령을 사용할 수 있습니다: docker images -f dangling=true
. 해당 명령으로 이미지를 삭제할 수 있습니다: docker images purge
.
여기서 기억해야 할 것은 이미지를 빌드할 때 태그를 지정하지 않으면 이미지는 dangling 이미지 목록에 표시됩니다. 이러한 상황을 피하려면 빌드할 때 태그를 지정하면 됩니다.
편집 2
이미지 정리를 위한 명령이 변경되었습니다. 현재 올바른 명령은 다음과 같습니다:
docker image prune
다음은 문서 링크입니다.
답변 2
중단이 된 Docker 캐시/중간 이미지를 삭제하는 방법은 다음과 같습니다. Docker는 이미지를 레이어(layer) 단위로 관리합니다. 그래서 이미지가 캐시될 때 단계별로 저장됩니다. 하지만 때로는 이 캐시가 무효화(invalidation)되고 삭제되어야 할 때가 있습니다. 캐시 무효화 후 삭제하는 방법을 아래에서 알아보겠습니다.1. 도커 이미지 삭제 명령어 사용하기 : 먼저, 캐시가 무효화되었다고 판단되는 이미지를 확인해야 합니다. `docker images -a` 명령어를 사용하여 모든 이미지를 확인할 수 있습니다. 여기서 캐시된 이미지의 ID나 태그를 기록해두세요.
2. 도커 이미지 삭제하기 : `docker rmi` 명령어를 사용하여 이미지를 삭제할 수 있습니다. 캐시가 삭제되어야 하는 이미지의 ID나 태그를 명령어와 함께 입력하세요. 예를 들어, `docker rmi abcdef123456`와 같이 사용합니다. 슈퍼 유저 권한이 필요할 수 있으므로 관리자 권한으로 실행하는 것이 좋습니다.
3. 모든 중간 이미지 삭제하기 : Docker는 이미지를 레이어 단위로 관리하며, 각 레이어는 단계별로 생성됩니다. 캐시 무효화 후에도 이전 중간 이미지가 남아있을 수 있습니다. 이 중간 이미지를 모두 삭제하려면 `docker builder prune` 명령어를 사용할 수 있습니다. 이 명령어는 사용되지 않는 레이어와 이미지를 모두 삭제합니다.
4. 용량 확인하기 : 중간 이미지와 캐시된 이미지를 삭제한 후에도 Docker의 용량이 충분하지 않은 경우, 추가적인 저장 공간을 확보해야 할 수 있습니다. `docker system df` 명령어를 사용하여 Docker의 디스크 사용량을 확인할 수 있습니다.
이상으로, Docker의 캐시가 무효화된 후에 캐시된/중간 이미지를 삭제하는 방법을 알아보았습니다. Docker를 더욱 효율적으로 관리하고 저장 공간을 최적화하기 위해 주기적으로 이러한 불필요한 이미지들을 삭제하는 것을 권장합니다.