Docker 이미지, 볼륨 및 컨테이너를 몇 초 만에 제거
게시 됨: 2023-03-03Docker는 개발자가 데스크톱에서 클라우드에 이르는 다양한 플랫폼에서 애플리케이션을 만들고 배포하는 데 도움이 되는 소프트웨어 컨테이너화 기술입니다.
Docker 컨테이너 내에서 애플리케이션을 구축하는 데 필요한 소스 코드, 종속성 및 도구의 스냅샷 또는 청사진을 이미지라고 합니다. 영구 데이터가 필요한 Docker 애플리케이션은 기본 운영 체제와 독립적인 볼륨이라는 스토리지에 의존할 수 있습니다.
이미지, 볼륨 및 컨테이너의 효과적인 구성은 Docker를 사용할 때 중요합니다. 이러한 자산의 사용되지 않은 화신은 누적되어 귀중한 디스크 공간을 차지하고 결국 시스템 성능에 영향을 미칠 수 있습니다.
이 문서에서는 이미지(개별적으로 또는 한 번에 모두), 볼륨 및 컨테이너를 삭제하여 시스템 구성을 유지 관리하는 다양한 방법을 살펴봅니다. 그리고 이러한 작업을 신속하게 완료하기 위해 docker
명령줄 인터페이스(CLI)를 사용할 것입니다.
Docker 이미지를 제거하는 방법
깨끗하고 조직적인 시스템을 유지하려면 Docker에서 오래되었거나 불필요한 이미지를 제거하는 것이 필수적입니다. CLI가 제거할 특정 이미지를 대상으로 지정하는 방법을 살펴보겠습니다.
먼저 docker image ls
명령을 사용하여 Docker 환경에서 이미지를 살펴보겠습니다.
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 60 seconds ago 7.05MB <none> <none> 85b412789704 2 days ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
위의 이미지를 나열하면 my_image 및 demo 라는 이미지가 공개되었으며 둘 다 latest 태그가 지정되었습니다. 세 번째 이미지에는 이름이나 태그가 없습니다. 이 경우에는 컨테이너에서 현재 사용하지 않는 "매달린" 이미지입니다. 이 매달려 있는 이미지는 my_image 를 다시 빌드한 결과입니다(일반적인 시나리오). 이미지의 이전 버전은 여전히 파일 시스템에 있지만 지금은 사용되지 않습니다.
이 목록에는 각 이미지의 64자 ID 중 처음 12자, 생성 날짜 및 이미지가 소비하는 저장 공간도 표시됩니다.
사용하지 않는 모든 이미지 제거
위의 목록 예시에는 매달린 이미지가 있습니다. 그러나 이름이나 태그가 없는 이미지가 활성화될 수 있습니다. 예를 들어 ID를 참조하여 컨테이너를 시작하는 데 사용될 수 있습니다.
실제로 매달린 모든 이미지를 안전하게 삭제하려면 docker image prune
명령을 사용할 수 있습니다.
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Deleted Images: deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d Total reclaimed space: 7.05MB
작업 결과를 보기 위해 이미지를 다시 나열합니다.
$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE my_image latest 2cbc27836df4 70 seconds ago 7.05MB demo latest 26d80cd96d69 15 months ago 28.5MB
가지치기 과정을 거친 후 이름이나 태그가 없는 이미지는 사라졌다.
이름으로 특정 이미지 제거
이름을 참조하여 제거할 이미지를 지정할 수 있습니다.
$ docker image rm <image_name>
참고: 아직 사용 중인 이미지는 쉽게 제거할 수 없습니다. 이미지를 사용 중인 실행 중인 컨테이너를 중지하거나 제거해야 합니다. 일반적으로 권장되지는 않지만 -f
플래그를 사용하여 활성 이미지를 강제로 제거할 수 있습니다.
$ docker image rm <image_name> -f
이미지 제거를 위해 rmi 속기 사용
Docker CLI에는 별칭 rmi
에서 이미지를 제거하는 약식 접근 방식이 있습니다. 이름으로 이미지를 제거하는 데 사용하면 다음과 같습니다.
$ docker rmi demo Untagged: demo:latest Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
다음 이미지 제거 예제에서는 rmi
사용합니다.
태그가 지정되지 않은 모든 이미지 제거
태그가 지정되지 않은 이미지는 여전히 귀중한 디스크 공간을 차지하므로 시간이 지남에 따라 시스템 속도가 점점 느려집니다.
Docker에서 태그가 지정되지 않은 모든 이미지를 제거하려면 필터와 함께 docker rmi
명령을 사용하십시오. -f
옵션 image rm
사용하여 특정 기준에 따라 필터를 제공할 -f
있습니다.
dangling=true
필터는 태그가 지정되지 않은 이미지를 식별하는 데 사용됩니다.
$ docker rmi $(docker images -f "dangling=true" -q)
위 명령의 -q
옵션은 태그가 지정되지 않은 모든 이미지의 이미지 ID를 표시합니다. 이러한 모든 ID는 docker rmi
에 인수로 전달되어 제거됩니다.
이 필터는 "dangling"이라는 키워드를 사용하지만 위에서 언급한 것처럼 태그가 없는 일부 이미지는 실제로 활성화될 수 있습니다. 이 필터로 선택한 이미지가 실제로 매달린 이미지가 아닌 경우 경고가 표시됩니다.
ID로 특정 이미지 제거
docker rmi
명령을 사용하여 해당 ID를 참조하여 특정 이미지를 제거할 수 있습니다.
$ docker rmi <image_id>
이름 및 태그로 특정 이미지 제거
docker rmi
명령을 사용하여 이름 및 태그와 함께 특정 이미지를 삭제할 수 있습니다.
예를 들어 이름은 같지만 태그가 다른 이미지가 여러 개 있는 경우 다음 형식을 사용하여 특정 이미지를 삭제할 수 있습니다.
$ docker rmi <image_name>:<tag>
이 방법은 리포지토리와 관련된 모든 이미지를 삭제하는 대신 이미지의 특정 버전을 삭제하려는 경우에 유용합니다.
최신 태그가 있는 모든 이미지 제거
Docker에서 "최신" 태그는 특정 Docker 이미지의 최신 버전을 나타냅니다. 최신 태그는 종종 Docker 이미지의 기본 태그로 사용됩니다. 다른 태그를 명시적으로 지정하지 않는 한 이미지의 가장 최근 빌드에 자동으로 할당됩니다.
Docker는 "latest" 태그가 있는 모든 이미지를 제거하는 명령을 제공합니다.
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
위의 명령은 두 부분으로 나뉩니다. 먼저 이미지 ID 목록을 가져온 다음 이 목록을 docker rmi
명령에 대한 인수로 전달합니다.
원격 저장소에서 이미지 제거
Docker Hub와 같은 원격 리포지토리에서 이미지를 제거하려면 먼저 Docker CLI를 사용하여 계정에 로그인해야 합니다.
로그인한 후 docker rmi
명령을 사용하여 이미지를 제거하기만 하면 됩니다. docker rmi
명령은 로컬 및 원격 이미지를 모두 제거할 수 있습니다.
docker rmi my_repo/my_image_tag
특히 리포지토리에 푸시된 이미지만 제거할 수 있습니다. 마찬가지로 실행 중인 컨테이너에서 사용하는 이미지를 제거할 수 없습니다.
원격 저장소에서 여러 이미지 제거
원격 리포지토리에서 여러 이미지를 제거하려면 docker rmi
명령 다음에 이미지 ID 또는 태그를 사용할 수 있습니다. 예를 들어:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
이렇게 하면 my_repo
리포지토리에서 image_tag_1
, image_tag_2
및 image_tag_3
태그가 있는 세 개의 이미지가 제거됩니다.
Docker 볼륨을 제거하는 방법
Docker 볼륨은 특히 많은 양의 데이터 또는 여러 백업을 포함하는 경우 많은 디스크 공간을 차지할 수 있습니다. 더 이상 필요하지 않은 볼륨을 제거하면 데이터 유출 위험이 줄어들고 승인되지 않은 사용자가 중요한 데이터에 액세스할 수 없습니다. 정기적으로 볼륨을 제거하면 Docker 환경을 최신 상태로 유지하고 오래된 데이터로 인해 발생하는 문제를 방지할 수 있습니다.
이러한 명령은 볼륨에 저장된 모든 데이터를 영구적으로 파괴하므로 주의하여 사용하십시오.
사용하지 않는 모든 볼륨 제거
Docker에서 사용하지 않는 볼륨을 제거하는 것은 이미지 또는 컨테이너를 제거하는 것만큼 중요합니다.
디스크 스토리지를 확보하려면 docker volume prune
명령을 사용할 수 있습니다.
이름으로 특정 볼륨 제거
Docker에서 특정 볼륨을 제거하면 사용하지 않는 볼륨을 제거하는 데 유용합니다. 볼륨을 제거하는 명령은 다음과 같습니다.
docker volume rm my_volume_name
위의 명령으로 my_volume_name 볼륨이 제거됩니다. 사용된 볼륨을 제거하려고 하면 Docker에서 오류가 발생합니다. docker volume ls
명령을 사용하여 사용 가능한 볼륨을 확인할 수 있습니다.
Docker 컨테이너를 제거하는 방법
Docker로 더 많이 작업할수록 디스크 리소스를 차지하는 사용하지 않는 컨테이너가 많이 누적될 수 있습니다. 삭제하지 않으면 시간이 지남에 따라 누적되어 귀중한 디스크 리소스를 차지하여 시스템 속도를 저하시키고 잠재적으로 위험에 빠뜨릴 수 있습니다.
중지된 모든 컨테이너 제거
docker container prune
명령은 Docker에서 중지된 모든 컨테이너를 삭제할 수 있습니다. 여기에서 이 명령은 제거될 중지된 모든 컨테이너 목록을 생성하고 진행하기 전에 확인을 요청합니다. 이것은 디스크 공간을 회수하고 깨끗하고 조직화된 Docker 환경을 유지하는 데 도움이 되며 중요한 것을 잃지 않는지 다시 확인할 수 있습니다.
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 4df4c47c4df4 d35bcec20bce
중지된 컨테이너만 이 명령으로 제거할 수 있습니다. 실행 중인 컨테이너를 제거해야 하는 경우 먼저 컨테이너를 중지하거나 다른 명령을 사용해야 합니다.
ID로 특정 컨테이너 제거
Docker에서는 컨테이너 ID와 함께 docker rm command
사용하여 ID로 특정 컨테이너를 제거할 수 있습니다. 먼저 docker ps command
사용하여 모든 컨테이너 ID를 가져옵니다.
$ docker ps -a -q 1ce3cdeb4035 06b79541e25c fa98f1804e3e $ docker rm 1ce3cdeb4035
위의 명령은 컨테이너가 중지된 상태인 경우에만 작동합니다. 컨테이너가 실행 중인 경우 -f 플래그를 사용하여 강제로 제거해야 합니다.
$ docker rm -f 1ce3cdeb4035
이름으로 특정 컨테이너 제거
Docker는 다목적 docker rm
명령을 제공하여 이름과 ID로 두 컨테이너를 모두 제거합니다.
예를 들어 web_server 라는 컨테이너가 있는 경우 다음 명령을 사용하여 컨테이너를 제거할 수 있습니다.
$ docker rm web_server
첫째, 용기를 멈추는 것이 중요합니다. Docker는 특정 컨테이너를 중지하는 docker stop
명령을 제공합니다.
실행 중인 모든 컨테이너 제거
실행 중인 모든 컨테이너를 삭제하려면 docker rm
명령을 사용할 수 있습니다.
$ docker rm $(docker ps -q)
docker ps -q
사용하면 실행 중인 컨테이너의 ID가 나열됩니다. 그런 다음 모든 컨테이너를 제거하는 docker rm
명령에 ID가 전달됩니다.
이 명령은 실행 중인 컨테이너만 제거합니다. 중지된 컨테이너를 포함하여 모든 컨테이너를 제거하려면 다음 명령을 대신 사용할 수 있습니다.
$ docker rm $(docker ps -a -q)
요약
이 문서에서는 Docker 이미지, 볼륨 및 컨테이너를 제거하는 방법을 설명했습니다. 깔끔하고 정돈된 시스템을 유지하기 위한 다양한 방법을 배웠습니다. ID 또는 이름으로 사용되지 않거나 태그가 지정되지 않았거나 특정 이미지를 모두 제거하는 명령을 다뤘습니다. 중지된 모든 컨테이너 또는 ID 또는 이름별로 특정 컨테이너를 삭제하는 명령도 배웠습니다.
Docker 이미지, 볼륨 및 컨테이너를 제거하는 것은 사용하지 않는 구성 요소를 관리하고 귀중한 디스크 공간을 복구하며 종종 시스템 성능을 향상시키는 데 도움이 되는 간단한 프로세스입니다.
개발자를 Docker로 끌어들이는 것은 이러한 단순성이며 Kinsta의 애플리케이션 호스팅 플랫폼을 사용하는 것보다 Docker에서 개발된 애플리케이션을 배포하는 더 간단한 방법은 없습니다. 지금 무료로 사용해 볼 수 있습니다.