컨테이너 개념

이 문서에서는 레지스트리, 저장소 및 아티팩트를 포함하여 컨테이너와 관련된 핵심 개념을 소개합니다. 이러한 개념이 Artifact Registry 및 Container Registry에 적용되는 방법에 대한 몇 가지 기본 정보도 포함되어 있습니다.

레지스트리

레지스트리는 저장소 내에서 이름별로 구성된 컨테이너 이미지 및 아티팩트를 저장하고 분산합니다. 레지스트리는 단일 저장소 또는 다중 저장소를 포함할 수 있고 공개 또는 비공개일 수 있습니다.

Docker Hub 및 Artifact Registry와 같은 레지스트리 서비스는 공개 또는 비공개 저장소를 만드는 옵션을 제공합니다. 가능한 보안 문제를 이해하기 위해서는 공개 이미지를 여기로 내보내는 것이 중요합니다. 취약점 모니터링, 종속 항목 공간 감소에 대한 자세한 내용은 종속 항목 관리를 참조하세요.

레지스트리는 개별 컨테이너 이미지를 저장하는 저장소로 구성됩니다. Artifact Registry를 사용하면 단일 프로젝트에 여러 저장소를 만들고 특정 리전 또는 멀티 리전 을 각 저장소에 연결할 수 있습니다. 관련 저장소는 라벨에 따라 그룹화할 수 있습니다.

저장소

이름이 같지만 태그가 다른 이미지 및 아티팩트는 저장소로 구성됩니다. 이미지를 저장소로 내보낼 때 태그를 지정하지 않으면 latest 태그를 사용하여 이미지에 태그가 지정됩니다. 태그를 지정하지 않고 다른 이미지를 내보내면 원래 이미지에서 더 새로운 이미지로 latest 태그가 이동되어, 첫 번째 이미지는 태그가 없어집니다. 출시 버전에 latest 이외의 태그를 제공하는 것이 좋습니다.

저장소라는 용어는 항상 일관적으로 사용되지 않습니다. Artifact Registry에서는 이미지 경로의 일부를 사용해서 프로젝트, 리전 또는 멀티 리전을 식별하고, 태그 또는 매니페스트 다이제스트와 함께 이미지 이름을 사용하여 올바른 버전을 식별하는 것이 보다 유용합니다.

예를 들면 다음과 같습니다.

docker push us-west1-docker.pkg.dev/PROJECT/quickstart-docker-repo/quickstart-image:tag1

  • us-west1은 저장소의 위치입니다.
  • docker.pkg.dev는 Docker 저장소의 호스트 이름입니다.
  • PROJECT는 Google Cloud 프로젝트 ID로 생성된 네임스페이스입니다.
  • quickstart-docker-repo는 이미지를 저장하는 프로젝트 아래의 네임스페이스입니다. Artifact Registry에서는 경로의 이 부분을 저장소라고 부릅니다.
  • quickstart-image는 모든 버전의 quickstart-image에 대한 저장소이며 이미지라고도 부릅니다.
  • tag1은 이미지 버전을 지정하는 태그입니다.

이미지

아티팩트 및 이미지 모두 Artifact Registry 내에 저장할 수 있습니다. 아티팩트는 텍스트 파일, Docker 이미지, Helm 차트 등 무엇이든 될 수 있습니다. 반면에 이미지는 일반적으로 컨테이너 이미지를 나타냅니다. 컨테이너 이미지는 모든 환경에서 실행할 모든 필수 요소가 포함된 소프트웨어의 패키지입니다. 자세한 내용은 컨테이너란을 참조하세요.

이미지는 저장소로 내보내기 또는 업로드되고 저장소에서 가져오기 또는 다운로드됩니다. 올바른 이미지 및 버전을 지정하기 위해서는 고유한 레지스트리 및 아티팩트를 지정해야 합니다.

예를 들면 다음과 같습니다.

docker pull us-west1-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

  • us-west1-docker.pkg.dev는 레지스트리입니다.
  • /google-samples/containers/gke/는 네임스페이스 및 하위 네임스페이스입니다. Artifact Registry에서 google-samples는 Google Cloud 프로젝트이고 containers는 Artifact Registry 저장소로 불립니다.
  • hello-app은 아티팩트 이름입니다.
  • :1.0은 가져올 아티팩트 버전을 지정하는 태그입니다.

레이어

저장소에 저장된 컨테이너 이름은 레이어를 사용하여 증분적으로 생성됩니다. 서로 다른 이미지가 일부 동일한 레이어를 사용할 수 있습니다. 레이어는 이미지 유형에 따라 다른 방식으로 정의됩니다. 예를 들어, Dockerfile의 각 안내는 Docker 이미지의 레이어에 해당합니다. 레지스트리 내에서 공통 레이어를 갖는 이미지가 이러한 레이어를 공유하여, 레이어 효율성이 증가합니다. 보안을 위해서 서로 다른 레지스트리 간에는 레이어가 공유되지 않습니다.

컨테이너 이미지를 삭제해도 레이어는 즉시 삭제되지 않습니다. 레지스트리의 이미지에서 참조하지 않는 레이어는 매일 삭제됩니다.

태그

이미지 버전을 지정하기 위해 저장소에 대해 이미지를 내보내거나 가져올 때 사용자가 태그를 추가합니다. 이미지는 한 개 도는 여러 개의 태그를 포함하거나, 전혀 태그를 포함하지 않을 수 있습니다. 동일한 태그를 사용해서 이미지를 두 번 내보낼 경우 첫 번째 이미지에서 태그가 제거되고 두 번째 이미지로 이동하여, 첫 번째 이미지는 태그가 없게 됩니다. 태그가 해제된 이미지는 여전히 해당 매니페스트 다이제스트를 통해 액세스할 수 있습니다.

latest 태그는 태그 없이 이미지를 내보낼 때 추가되는 특별한 태그입니다.

예를 들면 다음과 같습니다.

docker push us-west1-docker.pkg.dev/my-project/my-repo/hello-app

이미지를 hello-app:latest로 내보냅니다.

docker pull us-west1-docker.pkg.dev/my-project/my-repo/hello-app

hello-app:latest 이미지를 가져옵니다.

latest 이외의 태그를 사용하여 저장소에 이미지를 내보낼 때는 latest 태그가 추가되지 않습니다. 따라서 latest 이미지가 최신 변경 사항에 뒤쳐질 수 있습니다. 출시 버전에 대해 latest 이외의 태그를 사용하는 것이 좋습니다.

매니페스트

이미지 매니페스트는 각 이미지 내에서 레이어를 고유하게 식별하고 지정합니다. 매니페스트는 매니페스트 다이제스트라고 부르는 고유한 SHA-256 해시로 식별됩니다. 동일 이미지의 여러 버전을 동일한 태그로 내보내서, 일부 이미지에 태그가 없게 되지만, 매니페스트 다이제스트로 각 이미지가 고유하게 지정되기 때문에 매니페스트 다이제스트는 태그보다 신뢰성 및 안전성이 높습니다.

이미지 검색 또는 분석을 위해 도구를 사용할 경우 이러한 도구의 결과는 검색된 이미지에 대해서만 유효합니다. 검색된 이미지를 배포하도록 보장하기 위해서는 태그로 참조되는 이미지가 변경될 수 있기 때문에 태그에 의존할 수 없습니다.

Artifact Registry 관련 태그 지정 및 매니페스트에 대해 자세히 알아보려면 이미지 관리컨테이너 이미지 사용을 참조하세요.

다음 단계