docker scout repo disable 명령어를 사용하여 리포지토리 비활성화 방법

DockerBeginner
지금 연습하기

소개

이 랩에서는 docker scout repo disable 명령을 사용하여 효과적으로 리포지토리를 "비활성화"하는 방법을 배우면서 이미지 소스를 관리하는 방법을 배우게 됩니다. 특정 리포지토리 비활성화, 조직 내 모든 리포지토리 비활성화, 필터를 기반으로 리포지토리 비활성화, 특정 레지스트리에서 리포지토리 비활성화하는 방법을 살펴봅니다.

실습을 통해 리포지토리 접근을 제어하는 것이 어떻게 보안을 강화하고 이미지 관리 워크플로우를 간소화할 수 있는지 이해하게 될 것입니다.

특정 리포지토리 비활성화

이 단계에서는 Docker 명령줄을 사용하여 특정 리포지토리를 비활성화하는 방법을 배우게 됩니다. 리포지토리를 비활성화한다는 것은 docker pull 또는 docker run과 같은 명령을 사용할 때 레지스트리가 있는 전체 이미지 이름을 지정하지 않으면 Docker 가 해당 특정 소스에서 더 이상 이미지를 가져오지 않는다는 의미입니다. 이는 보안상의 이유 또는 이미지 소스를 제어하기 위해 유용할 수 있습니다.

먼저, 리포지토리가 활성화된 상황을 시뮬레이션해 보겠습니다. Docker 는 일부 패키지 관리자와 같은 방식으로 개별 리포지토리에 대한 명시적인 "활성화/비활성화" 명령을 가지고 있지 않지만, Docker 가 이미지를 가져오는 방식을 이해함으로써 유사한 효과를 얻을 수 있습니다. 기본적으로 Docker 는 Docker Hub 에서 가져옵니다. 다른 레지스트리를 지정하면 Docker 는 해당 레지스트리에서 가져옵니다. 특정 레지스트리에서 특정 리포지토리를 "비활성화"하려면 이미지를 가져올 때 해당 레지스트리를 지정하지 않거나, Docker 의 데몬을 구성하여 해당 레지스트리를 제외하도록 하면 됩니다 (이는 더 고급이며 여기서는 다루지 않습니다).

이 단계에서는 이미지 소스를 제어하는 개념에 중점을 둡니다. myregistry.example.com에 사용자 지정 레지스트리가 있고, Docker Hub 에서만 ubuntu 이미지를 가져오고 실수로 해당 레지스트리에서 가져오지 않도록 하려고 한다고 가정해 보겠습니다.

이를 시연하기 위해 먼저 Docker Hub 에서 이미지를 가져오려고 시도해 보겠습니다. 이것이 기본 동작입니다.

docker pull ubuntu:latest

Docker 가 Docker Hub 에서 ubuntu:latest 이미지를 가져오고 있음을 나타내는 출력을 볼 수 있습니다.

이제 가상으로 비활성화된 리포지토리에서 가져오려고 시도하는 것을 시뮬레이션해 보겠습니다. 사용자 지정 레지스트리가 설정되어 있지 않으므로, 구성되어 있다면 특정 위치에서 가져오려고 시도하는 명령을 사용합니다. 핵심은 레지스트리 접두사 (registry/repository:tag) 가 있는 전체 이미지 이름을 지정하면 Docker 가 정확히 어디를 찾아야 하는지 알려준다는 것을 이해하는 것입니다. myregistry.example.com/ubuntu에서 가져오고 싶지 않다면, 해당 전체 이름을 사용하지 않으면 됩니다.

특정 위치에서 가져오는 개념을 강화하기 위해, 다운로드가 매우 작고 빠른 다른 이미지인 hello-world를 가져오겠습니다. 이 이미지는 Docker Hub 에서 가져오지만, 명령 구조는 필요한 경우 레지스트리를 지정하는 방법을 보여줍니다.

docker pull docker.io/library/hello-world:latest

이 명령에서 docker.io는 기본 레지스트리 (Docker Hub) 이고, library는 공식 이미지의 기본 네임스페이스이며, hello-world는 리포지토리 이름입니다. docker.io/library/hello-world를 명시적으로 지정함으로써 Docker 에게 Docker Hub 에서 가져오도록 지시합니다. 가상의 myregistry.example.com에서 ubuntu를 "비활성화"하려면 docker pull 또는 docker run 명령에서 myregistry.example.com/ubuntu를 사용하지 않으면 됩니다.

여기서 핵심 개념은 Docker 가 제공된 이미지 이름을 기반으로 이미지를 가져온다는 것입니다. ubuntu와 같은 간단한 이름을 제공하면 Docker 는 구성된 레지스트리 (기본적으로 Docker Hub 만) 를 검색합니다. myregistry.example.com/ubuntu와 같은 정규화된 이름을 제공하면 Docker 는 myregistry.example.com에서 가져오려고 시도합니다. 특정 레지스트리에서 특정 리포지토리를 "비활성화"하려면 명령이 해당 레지스트리 접두사를 사용하여 해당 리포지토리를 참조하지 않도록 하면 됩니다.

이 단계의 확인을 위해 hello-world 이미지가 성공적으로 가져왔는지 확인하여 docker pull 명령을 성공적으로 실행했음을 나타냅니다.

조직의 모든 리포지토리 비활성화

이 단계에서는 Docker 레지스트리에서 특정 조직 또는 네임스페이스 내의 모든 리포지토리에 대한 접근을 제어하는 개념을 살펴봅니다. 단일 리포지토리를 비활성화하는 것과 유사하게, Docker 에서 조직의 모든 리포지토리를 "비활성화"하는 것은 단일 명령보다는 구성 또는 정책과 관련되는 경우가 많습니다. 그러나 Docker 가 레지스트리와 상호 작용하는 방식과 특정 조직의 네임스페이스에서 이미지를 가져오지 않도록 하는 방법을 이해함으로써 이를 시뮬레이션할 수 있습니다.

Docker 이미지는 종종 조직 또는 개별 사용자를 나타낼 수 있는 네임스페이스 아래에 구성됩니다. 예를 들어, ubuntulibrary 네임스페이스 (Docker Hub 의 공식 이미지용) 에 있으며, 회사의 이미지는 mycompany/myimage와 같은 네임스페이스 아래에 있을 수 있습니다. mycompany와 같은 조직의 모든 리포지토리를 효과적으로 "비활성화"하려면 Docker 가 레지스트리의 해당 조직의 네임스페이스에서 가져오도록 구성되지 않도록 해야 합니다.

우리는 주로 Docker Hub 에 연결된 표준 Docker 환경에서 작업하고 있으므로, 비활성화할 사용자 지정 조직이 설정되어 있지 않습니다. 그러나 존재하지 않는 조직에서 이미지를 가져오려고 시도하거나, 접근 권한이 있는 경우 특정 조직의 이미지를 나열하는 방법을 보여줌으로써 원리를 시연할 수 있습니다.

먼저 현재 가지고 있는 이미지를 나열해 보겠습니다. 이전 단계에서 ubuntuhello-world 이미지를 볼 수 있습니다.

docker images

이제 Docker Hub 에서 nonexistentorg라는 가상의 조직에서 이미지를 가져오는 것을 "비활성화"하려는 경우를 상상해 보겠습니다. 이 조직에서 이미지를 가져오려고 시도하면 조직 또는 이미지가 존재하지 않으므로 Docker 가 실패합니다. 이 가져오기 실패는 리포지토리가 "비활성화"되거나 접근할 수 없게 되는 실질적인 효과입니다.

리포지토리를 사용할 수 없을 때 예상되는 동작을 확인하기 위해 존재하지 않는 조직에서 이미지를 가져오려고 시도해 보겠습니다.

docker pull nonexistentorg/someimage:latest

이미지 또는 리포지토리를 찾을 수 없다는 오류 메시지가 표시됩니다. 이는 유효한 조직과 리포지토리가 없으면 Docker 가 이미지를 가져올 수 없음을 보여줍니다.

프로덕션 환경에서 조직의 리포지토리에 대한 접근을 실제로 "비활성화"하려면 일반적으로 Docker 데몬을 구성하거나 프록시를 사용하여 레지스트리의 해당 특정 네임스페이스에 대한 접근을 차단합니다. 그러나 이 랩의 목적을 위해, Docker 가 이미지를 가져오려면 유효한 조직 및 리포지토리 이름이 필요하다는 것을 이해하는 것이 중요합니다. docker pull 또는 docker run 명령에서 조직의 네임스페이스를 사용하지 않음으로써 해당 조직에서 가져오는 것을 효과적으로 "비활성화"합니다.

이 단계의 확인을 위해, 존재하지 않는 조직에서 가져오려는 시도가 오류를 발생시켰는지 확인하여 Docker 가 해당 가상 리포지토리에 접근할 수 없었음을 확인합니다. docker pull nonexistentorg/someimage:latest 명령에 대한 명령 기록을 확인할 수 있습니다.

필터를 사용하여 리포지토리 비활성화

이 단계에서는 필터링을 사용하여 상호 작용하는 리포지토리를 관리하는 방법을 살펴봅니다. Docker 는 파일을 필터링하는 것과 같은 방식으로 임의의 필터를 기반으로 리포지토리를 "비활성화"하는 내장 명령을 가지고 있지 않지만, 이미지를 나열하거나 검색할 때 필터링을 사용하고 docker pull 명령에서 정확성을 유지함으로써 유사한 결과를 얻을 수 있습니다.

필터링은 Docker 에서 docker images, docker ps, docker search와 같은 명령의 결과를 좁히는 강력한 기능입니다. 이미지 이름, 태그, 생성 시간 등 다양한 기준을 기반으로 필터링할 수 있습니다. 필터를 사용하면 특정 패턴과 일치하는 리포지토리를 효과적으로 무시하거나 제외하여 현재 보기 또는 작업에서 "비활성화"할 수 있습니다.

먼저 ubuntuhello-world 이미지를 포함하여 현재 가지고 있는 모든 이미지를 나열해 보겠습니다.

docker images

이제 library 네임스페이스 (예: ubuntuhello-world와 같은 공식 이미지 포함) 에 속하는 이미지만 보고 싶다고 가정해 보겠습니다. --filter 플래그를 reference 기준과 함께 사용할 수 있습니다. reference 필터는 선택적 레지스트리 및 태그를 포함하여 이미지 이름과 일치합니다.

docker images --filter "reference=*/library/*"

이 명령은 참조에 /library/가 포함된 이미지를 나열합니다. ubuntuhello-world 이미지가 나열되는 것을 볼 수 있습니다. 이는 특정 리포지토리를 포함하도록 필터링하는 방법을 보여줍니다.

필터를 기반으로 리포지토리를 "비활성화"하는 것을 시뮬레이션하려면 기본적으로 반대로 수행합니다. 즉, 보고 싶지 않거나 상호 작용하고 싶지 않은 리포지토리를 제외하도록 필터링합니다. 예를 들어, library 네임스페이스의 이미지를 제외한 모든 이미지를 나열하려면 모든 이미지를 나열한 다음 패턴을 기반으로 필터링하는 스크립팅이 필요할 수 있는 더 복잡한 접근 방식이 필요합니다.

"비활성화"와 관련하여 필터링의 보다 실용적인 적용은 이미지를 검색할 때입니다. 특정 기준과 일치하는 이미지를 찾고 다른 이미지를 무시하도록 검색 결과를 필터링할 수 있습니다.

Docker Hub 에서 "ubuntu"라는 단어가 포함된 이미지를 검색해 보겠습니다.

docker search ubuntu

Ubuntu 와 관련된 리포지토리 목록이 표시됩니다. 이제 공식 Ubuntu 이미지만 보고 싶다고 가정해 보겠습니다. --filter 플래그를 is-official=true 기준과 함께 사용할 수 있습니다.

docker search ubuntu --filter "is-official=true"

이 명령은 검색 결과를 필터링하여 공식 이미지만 표시합니다. 이 필터를 사용하면 검색 결과에서 모든 비공식 Ubuntu 리포지토리를 효과적으로 "비활성화"하거나 무시하는 것입니다.

핵심은 가져오기에 대한 직접적인 "필터별 비활성화" 명령은 없지만, docker imagesdocker search와 같은 명령에서 필터링을 사용하여 사용 가능한 리포지토리 보기를 관리하고 "비활성화"하려는 리포지토리와의 상호 작용을 피할 수 있다는 것입니다.

이 단계의 확인을 위해, is-official=true 필터와 함께 docker search 명령을 성공적으로 사용했는지 확인합니다.

특정 레지스트리에서 리포지토리 비활성화

이 마지막 단계에서는 특정 레지스트리에서 이미지를 가져오는 것을 제어하는 방법에 중점을 둡니다. Docker 는 Docker Hub(기본값), Google Container Registry, Amazon Elastic Container Registry 또는 자체 개인 레지스트리와 같은 여러 레지스트리와 상호 작용할 수 있습니다. 특정 레지스트리에서 리포지토리를 "비활성화"한다는 것은 Docker 가 해당 지정된 소스에서 특정 이미지를 가져오려고 시도하지 않도록 하는 것을 의미합니다.

이전 단계에서 배운 것처럼 Docker 는 제공된 이미지 이름을 기반으로 이미지를 가져옵니다. myregistry.example.com/myimage:latest와 같은 정규화된 이미지 이름을 제공하면 Docker 는 myregistry.example.com에서 가져오려고 시도합니다. myimage와 같은 간단한 이름을 제공하면 Docker 는 구성된 레지스트리에서 기본적으로 Docker Hub 부터 시작하여 검색합니다.

myregistry.example.com과 같은 특정 레지스트리에서 myimage와 같은 리포지토리를 효과적으로 "비활성화"하는 가장 간단한 방법은 docker pull 또는 docker run 명령에서 정규화된 이름 myregistry.example.com/myimage:latest를 사용하지 않는 것입니다. 대신 다른 레지스트리에서 이미지를 가져오거나 다른 이미지 이름을 사용합니다.

이 랩 환경에서는 사용자 지정 레지스트리가 설정되어 있지 않으므로, 존재하지 않는 가상의 레지스트리에서 이미지를 가져오려고 시도하여 개념을 시연합니다. 이를 통해 Docker 가 지정된 레지스트리의 리포지토리에 접근할 수 없을 때의 동작을 보여줍니다.

가상의 레지스트리 nonexistentregistry.example.com에서 testimage라는 이미지를 가져오려고 시도해 보겠습니다.

docker pull nonexistentregistry.example.com/testimage:latest

Docker 가 레지스트리에 연결하거나 이미지를 찾을 수 없다는 오류 메시지가 표시됩니다. 이는 접근할 수 없거나 리포지토리가 포함되어 있지 않은 레지스트리를 지정함으로써 해당 특정 소스에서 해당 리포지토리를 가져오는 것을 효과적으로 "비활성화"함을 보여줍니다.

실제 시나리오에서 여러 레지스트리가 구성된 경우, 적절한 정규화된 이미지 이름을 사용하여 Docker 가 가져올 레지스트리를 제어합니다. 특정 레지스트리에서 리포지토리를 "비활성화"하려면 워크플로우 및 명령이 해당 이미지를 다른 레지스트리에서 가져오거나 전혀 가져오지 않도록 구성되어 있는지 확인합니다.

특정 레지스트리를 제외하도록 Docker 의 데몬을 구성하거나 프록시를 사용하는 것과 같은 고급 구성을 사용하여 허용되는 레지스트리에 대한 정책을 적용할 수도 있습니다. 그러나 기본적인 원칙은 동일합니다. docker pulldocker run 명령에 사용된 이미지 이름을 제어하면 Docker 가 사용하려고 시도하는 레지스트리가 결정됩니다.

이 단계의 확인을 위해, 가상의 레지스트리 이름을 지정하여 이미지를 가져오려고 시도했는지 확인합니다. docker pull nonexistentregistry.example.com/testimage:latest 명령에 대한 명령 기록을 확인할 수 있습니다.

요약

이 랩에서는 Docker 에서 이미지 소스를 제어하는 개념을 탐구하여, 이미지 가져오기에 특정 리포지토리를 효과적으로 "비활성화"하는 방법에 중점을 두었습니다. Docker 가 전통적인 의미에서 개별 리포지토리에 대한 직접적인 disable 명령을 가지고 있지 않지만, docker pull 또는 docker run 작업 중에 이미지 이름을 지정하는 방법을 이해하고 제어함으로써 이를 달성할 수 있다는 것을 배웠습니다. 기본적으로 Docker 는 Docker Hub 에서 가져오며, 레지스트리 접두사가 있는 전체 이미지 이름을 지정하면 Docker 가 해당 특정 위치에서 가져오도록 지시합니다. 따라서 특정 레지스트리의 특정 리포지토리에서 가져오는 것을 피하려면 해당 레지스트리를 포함하는 전체 이미지 이름을 사용하지 않으면 됩니다.

기본 Docker Hub 에서 이미지를 가져오는 연습을 했고, 다른 레지스트리를 지정하면 소스가 어떻게 변경되는지 논의했습니다. 핵심은 Docker 가 이미지 가져오기에 사용하는 리포지토리를 관리하는 것은 전역 비활성화 명령이 아닌, 레지스트리 접두사를 사용하여 이미지 이름을 명시적으로 지정하는 것을 통해 주로 이루어진다는 것입니다. 이를 통해 보안 및 운영상의 이유로 이미지 소싱을 세밀하게 제어할 수 있습니다.