Docker Hub의 소프트웨어 아티팩트

Docker Hub의 소프트웨어 아티팩트 (Software artifacts on Docker Hub)

히언 이미지뿐 아니라 Helm 차트 같은 OCI 아티팩트도 Docker Hub에 저장하고 푸시하는 방법을 배워볼게요.

출처: 문서

본문

컨테이너 이미지뿐 아니라 어떤 종류의 소프트웨어 아티팩트든 Docker Hub에 저장할 수 있어요. 소프트웨어 아티팩트는 소프트웨어 개발 과정에서 만들어져 소프트웨어의 생성, 유지, 이해에 기여하는 모든 항목이에요. Docker Hub는 이미지 매니페스트의 config 속성을 활용해 OCI 아티팩트를 지원해요.

OCI 아티팩트란 무엇인가요?

OCI 아티팩트는 소프트웨어 애플리케이션과 관련된 임의의 파일이에요. 몇 가지 예는 다음과 같아요:

  • Helm 차트
  • SBOM(Software Bill of Materials, 소프트웨어 자재 명세서)
  • 디지털 서명
  • 출처(Provenance) 데이터
  • 증명(Attestations)
  • 취약점 보고서

Docker Hub가 OCI 아티팩트를 지원한다는 것은 하나의 저장소를 사용해 컨테이너 이미지와 다른 자산을 모두 저장·배포할 수 있다는 뜻이에요. OCI 아티팩트의 일반적인 사용 사례는 Helm 차트 예요. Helm 차트는 애플리케이션의 Kubernetes 배포를 정의하는 패키징 형식이에요. Kubernetes는 컨테이너의 인기 있는 런타임이므로 애플리케이션 이미지와 배포 템플릿을 한곳에 호스팅하는 것이 합리적이에요.

Docker Hub에서 OCI 아티팩트 사용하기

Docker Hub에서 OCI 아티팩트는 컨테이너 이미지와 비슷한 방식으로 관리해요. 레지스트리에서 OCI 아티팩트를 푸시·풀하는 것은 레지스트리 클라이언트를 사용해서 해요. ORAS CLI 는 레지스트리에서 OCI 아티팩트를 관리하는 기능을 제공하는 커맨드라인 도구예요. Helm 차트를 사용한다면 Helm CLI는 레지스트리와 차트를 푸시·풀하는 내장 기능을 제공해요. 레지스트리 클라이언트는 Docker Hub 레지스트리 API에 HTTP 요청을 호출해요. 레지스트리 API는 OCI distribution specification 에 정의된 표준 프로토콜을 따릅니다.

예시

이 섹션은 Docker Hub에서 OCI 아티팩트를 사용하는 몇 가지 예시를 보여줘요.

Helm 차트 푸시하기

다음 절차는 Helm 차트를 OCI 아티팩트로 Docker Hub에 푸시하는 방법을 보여줘요.

사전 요구 사항: Helm 버전 3.0.0 이상

단계:

  1. 새 Helm 차트를 만들어요.
$ helm create demo

이 명령은 상용구 템플릿 차트를 생성해요.

  1. Helm 차트를 tarball로 패키징해요.
$ helm package demo
Successfully packaged chart and saved it to: demo-0.1.0.tgz
  1. Docker 자격 증명을 사용해 Helm으로 Docker Hub에 로그인해요.
$ helm registry login registry-1.docker.io -u <YOUR_DOCKER_USERNAME>
  1. 차트를 Docker Hub 저장소로 푸시해요.
$ helm push demo-0.1.0.tgz oci://registry-1.docker.io/<YOUR_DOCKER_USERNAME>

이렇게 하면 Helm 차트 tarball이 <YOUR_DOCKER_USERNAME> 네임스페이스의 demo 저장소에 업로드돼요. 이 명령을 실행하면 아직 없을 경우 <YOUR_DOCKER_USERNAME>/demo 저장소가 만들어져요.

  1. Docker Hub의 저장소 페이지로 이동해요. 페이지의 Tags 섹션에 Helm 차트 태그가 표시돼요. 태그 이름을 선택해 해당 태그 페이지로 이동해요. 페이지에는 Helm 차트 작업에 유용한 몇 가지 명령이 나열돼 있어요.

볼륨 푸시하기

다음 절차는 컨테이너 볼륨을 OCI 아티팩트로 Docker Hub에 푸시하는 방법을 보여줘요.

사전 요구 사항: ORAS CLI 버전 0.15 이상

단계:

  1. 볼륨 콘텐츠로 사용할 더미 파일을 만들어요.
$ touch myvolume.txt
  1. ORAS CLI를 사용해 Docker Hub에 로그인해요.
$ oras login -u <YOUR_DOCKER_USERNAME> registry-1.docker.io
  1. 파일을 Docker Hub로 푸시해요.
$ oras push registry-1.docker.io/<YOUR_DOCKER_USERNAME>/demo:0.0.1 \
  --artifact-type=application/vnd.docker.volume.v1+tar.gz \
  myvolume.txt:text/plain

이렇게 하면 <YOUR_DOCKER_USERNAME> 네임스페이스의 demo 저장소에 볼륨이 업로드돼요. --artifact-type 플래그는 Docker Hub가 아티팩트를 컨테이너 볼륨으로 인식하게 만드는 특수 미디어 타입을 지정해요.

  1. Docker Hub의 저장소 페이지로 이동해요. 페이지의 Tags 섹션에 볼륨 태그가 표시돼요.

일반 아티팩트 파일 푸시하기

다음 절차는 일반 OCI 아티팩트를 Docker Hub에 푸시하는 방법을 보여줘요.

사전 요구 사항: ORAS CLI 버전 0.15 이상

단계:

  1. 아티팩트 파일을 만들어요.
$ touch myartifact.txt
  1. ORAS CLI를 사용해 Docker Hub에 로그인해요.
$ oras login -u <YOUR_DOCKER_USERNAME> registry-1.docker.io
  1. 파일을 Docker Hub로 푸시해요.
$ oras push registry-1.docker.io/<YOUR_DOCKER_USERNAME>/demo:0.0.1 myartifact.txt:text/plain
  1. Docker Hub의 저장소 페이지로 이동해요. 페이지의 Tags 섹션에 아티팩트 태그가 표시돼요.

더 알아보기 (Learn more)