소개
Docker 는 개발자가 애플리케이션을 구축, 배포 및 관리하는 방식을 혁신한 강력한 컨테이너화 플랫폼입니다. 그러나 사용자는 Docker 이미지를 제거하려고 할 때 'no such image' 오류를 종종 겪습니다. 이 랩에서는 Docker 이미지에 대한 이해를 돕고, 제어된 환경에서 오류를 재현하며, 이를 효과적으로 해결하기 위한 실용적인 기술을 배우도록 안내합니다.
이 랩을 마치면 Docker 이미지 관리에 대한 실질적인 경험을 얻고, 일반적인 이미지 관련 오류를 자신 있게 해결할 수 있게 됩니다.
Docker 이미지 이해
Docker 이미지와 관련된 일반적인 명령어를 살펴보면서 시작해 보겠습니다. Docker 이미지는 컨테이너를 생성하는 데 사용되는 읽기 전용 템플릿입니다. 여기에는 애플리케이션 실행에 필요한 모든 구성 요소가 포함되어 있습니다.
Docker 설치 확인
먼저, Docker 가 시스템에 제대로 설치되어 실행 중인지 확인해 보겠습니다.
docker --version
다음과 유사한 출력을 볼 수 있습니다.
Docker version 20.10.21, build baeda1f
Docker 데몬이 실행 중인지도 확인해 보겠습니다.
docker info
이 명령은 Docker 설치에 대한 시스템 전체 정보를 표시합니다.
Docker 이미지 가져오기 (Pulling Docker Images)
이제 Docker Hub 에서 몇 가지 Docker 이미지를 가져와 사용해 보겠습니다.
docker pull ubuntu:20.04
이 명령은 Ubuntu 20.04 이미지를 다운로드합니다. 다음과 유사한 진행 상황 출력을 볼 수 있습니다.
20.04: Pulling from library/ubuntu
ca1779a3256a: Pull complete
Digest: sha256:db8bf6f4fb351aa7a26e27ba2686cf8eb511a5c19b8c695210842adc8957aa27
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
다른 이미지를 가져와 보겠습니다.
docker pull alpine:latest
Docker 이미지 목록 (Listing Docker Images)
시스템에 로컬로 있는 모든 이미지를 보려면 다음을 실행합니다.
docker images
출력은 다음과 유사해야 합니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest e66264b98777 2 weeks ago 5.53MB
ubuntu 20.04 f8fe765559e5 4 weeks ago 72.8MB
이미지 세부 정보 검사 (Inspecting Image Details)
inspect 명령을 사용하여 이미지에 대한 자세한 정보를 볼 수 있습니다.
docker inspect alpine:latest
그러면 이미지에 대한 자세한 정보가 포함된 JSON 문서가 출력됩니다.
이제 Docker 이미지의 기본 사항을 이해하고 시스템에 몇 가지 이미지가 있으므로 'no such image' 오류를 재현하고 해결하는 방법을 알아보겠습니다.
'no such image' 오류 재현
이 단계에서는 'no such image' 오류를 의도적으로 발생시켜 더 잘 이해하도록 하겠습니다. 이 오류는 일반적으로 존재하지 않거나 잘못된 이름/태그를 가진 이미지를 제거하려고 할 때 발생합니다.
오류 발생 시나리오 생성
시스템에 존재하지 않는 이미지를 제거해 보겠습니다.
docker rmi nonexistent-image:v1.0
다음 오류 메시지가 표시됩니다.
Error: No such image: nonexistent-image:v1.0
이것이 바로 이 랩에서 중점적으로 다루는 'no such image' 오류입니다.
다양한 시나리오 이해
이 오류로 이어지는 몇 가지 일반적인 시나리오가 있습니다.
- 존재하지 않는 이미지를 제거하려고 시도
- 잘못된 이미지 이름 또는 태그 사용
- 이미지 ID 또는 이름의 오타
- 이미지가 이미 제거됨
잘못된 태그로 이미지를 제거하여 오류의 또 다른 인스턴스를 생성해 보겠습니다.
docker rmi ubuntu:nonexistent-tag
다시, 유사한 오류가 표시됩니다.
Error: No such image: ubuntu:nonexistent-tag
Docker 에서의 이미지 식별
Docker 이미지는 세 가지 방법으로 참조할 수 있습니다.
- 레포지토리 및 태그 (예:
ubuntu:20.04) - 이미지 ID (예:
f8fe765559e5) - 이미지 다이제스트 (SHA256 해시)
가져온 이미지의 이미지 ID 를 살펴보겠습니다.
docker images --no-trunc
이렇게 하면 잘린 버전 대신 전체 이미지 ID 가 표시됩니다. 이제 부분적이지만 잘못된 이미지 ID 를 사용하여 이미지를 제거해 보겠습니다.
docker rmi abc123
이 ID 가 시스템의 어떤 이미지와도 일치하지 않으므로 동일한 'no such image' 오류가 표시됩니다.
Docker 가 이미지를 식별하는 방식을 이해하는 것은 'no such image' 오류를 해결하는 데 매우 중요합니다. 다음 단계에서는 이 오류를 올바르게 해결하는 방법을 배우겠습니다.
'no such image' 오류 해결
이제 오류를 이해했으므로 이를 해결하기 위한 실용적인 방법을 살펴보겠습니다. 'no such image' 오류를 해결하는 핵심은 올바른 이미지 참조를 사용하는 것입니다.
방법 1: 사용 가능한 이미지 확인
오류를 해결하는 첫 번째 단계는 시스템에서 실제로 사용 가능한 이미지를 확인하는 것입니다.
docker images
이것은 시스템에 있는 모든 이미지를 표시합니다. 제거하려는 이미지가 이 목록에 나타나는지 확인하십시오.
방법 2: 이미지 ID 사용
이미지의 정확한 이름과 태그를 잘 모르는 경우 이미지 ID 를 대신 사용할 수 있습니다. 이미지 ID 는 Docker 환경의 각 이미지에 대한 고유 식별자입니다.
Ubuntu 이미지의 ID 를 찾아보겠습니다.
docker images --format "{{.ID}} {{.Repository}}:{{.Tag}}" | grep ubuntu
이 명령은 이미지 ID 를 이름 및 태그와 함께 나열한 다음 Ubuntu 이미지를 필터링합니다. 출력은 다음과 같을 수 있습니다.
f8fe765559e5 ubuntu:20.04
이제 ID 를 사용하여 이미지를 제거할 수 있습니다.
## f8fe765559e5를 시스템의 실제 ID로 바꿉니다.
docker rmi f8fe765559e5
방법 3: force 옵션 사용 (주의)
경우에 따라 이미지를 강제로 제거해야 할 수 있습니다. 이 이미지가 여전히 사용 중인 경우 문제가 발생할 수 있으므로 주의해서 사용해야 합니다.
docker rmi -f alpine:latest
-f 또는 --force 플래그는 제거를 강제합니다. 다음과 같은 출력을 볼 수 있습니다.
Untagged: alpine:latest
Untagged: alpine@sha256:1a6d376bf70c0941e5a1bcf34f4d0b5e2e7ed37e58c3c70eadf39f2c5f2146d7
Deleted: sha256:e66264b98777c5a0ece2decdca479c909c8c01571cd473ce6c1013773f190e6c
방법 4: prune 을 사용하여 정리
특정 이미지가 아닌 사용하지 않는 모든 이미지를 제거하려면 prune 명령을 사용할 수 있습니다.
docker image prune
이렇게 하면 dangling 이미지 (태그가 없고 컨테이너에서 사용하지 않는 이미지) 가 모두 제거됩니다. dangling 이미지뿐만 아니라 사용하지 않는 모든 이미지를 제거하려면 다음을 수행합니다.
docker image prune -a
이 명령은 컨테이너에서 사용하지 않는 모든 이미지를 제거하므로 주의하십시오.
남아 있는 ubuntu 이미지를 올바르게 제거해 보겠습니다.
docker rmi ubuntu:20.04
성공하면 다음을 볼 수 있습니다.
Untagged: ubuntu:20.04
Untagged: ubuntu@sha256:db8bf6f4fb351aa7a26e27ba2686cf8eb511a5c19b8c695210842adc8957aa27
Deleted: sha256:f8fe765559e51d3c522e282a2ef234d968fc23030b2bce9d8487466b53974467
이제 'no such image' 오류를 해결하는 여러 가지 방법을 배웠으므로 이 일반적인 문제 없이 Docker 이미지를 효과적으로 관리할 수 있습니다.
컨테이너에서 사용되는 이미지 처리
이미지 제거 문제로 이어질 수 있는 또 다른 일반적인 시나리오는 이미지가 컨테이너에서 사용 중인 경우입니다. 이 상황을 처리하는 방법을 살펴보겠습니다.
이미지에서 컨테이너 생성
먼저 작은 이미지를 가져와서 컨테이너를 생성해 보겠습니다.
docker pull nginx:alpine
이제 이 이미지를 사용하여 컨테이너를 실행해 보겠습니다.
docker run --name test-nginx -d nginx:alpine
-d 플래그는 컨테이너를 detached 모드 (백그라운드) 로 실행합니다. 출력에서 컨테이너 ID 를 볼 수 있습니다.
실행 중인 컨테이너 확인
컨테이너가 실행 중인지 확인합니다.
docker ps
다음과 유사한 출력을 볼 수 있습니다.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1b2c3d4e5f6 nginx:alpine "/docker-entrypoint.…" 10 seconds ago Up 9 seconds 80/tcp test-nginx
이미지 제거 시도
이제 실행 중인 컨테이너에서 사용 중인 이미지를 제거해 보겠습니다.
docker rmi nginx:alpine
다음과 같은 오류 메시지가 표시됩니다.
Error response from daemon: conflict: unable to remove repository reference "nginx:alpine" (must force) - container a1b2c3d4e5f6 is using its referenced image b46db85084b8
이 오류는 Docker 가 컨테이너에서 사용 중인 이미지를 제거하는 것을 방지하기 때문에 발생합니다.
사용 중인 이미지 충돌 해결
이를 해결하려면 두 가지 옵션이 있습니다.
옵션 1: 먼저 컨테이너를 중지하고 제거
## 컨테이너 중지
docker stop test-nginx
## 컨테이너 제거
docker rm test-nginx
## 이제 이미지 제거
docker rmi nginx:alpine
옵션 2: 이미지 강제 제거 (권장하지 않음)
docker rmi -f nginx:alpine
force 옵션을 사용하면 실행 중인 컨테이너에 문제가 발생할 수 있으므로 일반적으로 먼저 컨테이너를 중지하고 제거하는 것이 좋습니다.
전체 정리 예시
테스트 환경을 완전히 정리해 보겠습니다.
## 모든 컨테이너 나열 (중지된 컨테이너 포함)
docker ps -a
## 실행 중인 모든 컨테이너 중지
docker stop $(docker ps -q)
## 모든 컨테이너 제거
docker rm $(docker ps -a -q)
## 이제 안전하게 모든 이미지 제거
docker rmi $(docker images -q)
이러한 명령을 실행한 후 Docker 환경이 정리되어야 합니다. 다음으로 확인할 수 있습니다.
docker images
이것은 이미지를 표시하지 않거나 다음을 표시해야 합니다.
REPOSITORY TAG IMAGE ID CREATED SIZE
컨테이너에서 사용 중인 이미지를 처리하는 방법을 이해하면 Docker 이미지 관리 문제의 또 다른 일반적인 원인을 방지하고 해결할 수 있습니다.
요약
이 랩에서는 Docker 이미지 관리에 대한 실질적인 경험을 얻었으며, 일반적인 'no such image' 오류를 해결하는 방법을 배웠습니다. 이제 다음을 이해하게 되었습니다.
- 이미지를 가져오고, 나열하고, 검사하는 방법을 포함하여 Docker 이미지로 작업하는 방법
- 'no such image' 오류를 발생시킬 수 있는 다양한 시나리오
- 사용 가능한 이미지 확인, 이미지 ID 사용, 필요한 경우 강제 제거를 포함한 오류 해결을 위한 여러 가지 방법
- 컨테이너에서 사용 중인 이미지의 특수한 경우를 처리하는 방법
이러한 기술은 Docker 환경을 보다 효과적으로 관리하고 일반적인 문제를 해결하는 데 도움이 될 것입니다. Docker 를 계속 사용하면서 효율적인 컨테이너화된 워크플로우를 유지하려면 적절한 이미지 관리가 필수적이라는 점을 기억하십시오.



