Profile picture

[Docker] Github Container Registry 사용하기

JaehyoJJAng2023년 04월 12일

Github Container Registry

Github에서는 Github Packages라는 이름으로 Docker 이미지를 지원하고 있었으나 20년도에 Github Container Registry가 발표되었고 Github Packages의 Docker 이미지는 Container Registry로 대체되었다.

기존 Packages에서는 docker.pkg.github.com 주소를 사용했지만, Container Registry는 ghcr.io를 사용한다.


Container Registry를 사용하려면 액세스 토큰이 필요하다.
https://github.com/settings/tokens에서 패키지에 대한 권한을 가진 토큰을 생성해야 한다.

  • write: packages
  • read:packages
  • delete:packages

image


이 토큰을 TOKEN.txt에 저장했다고 하면 다음과 같이 Github Container Registry에 로그인할 수 있다.

$ cat TOKEN.txt | docker login https://ghcr.io -u ${GITHUB_USERNAME} --password-stdin
Login Succeeded

테스트로 사용할 yshrim12/lotto 이미지를 사용해서 ghcr.io/{OWNER>/image_test:0.1 이라는 태그를 추가한다.

$ docker tag yshrim12/lotto ghcr.io/${GITHUB_USERNAME}/image_test:0.1

$ docker images | grep "ghcr.io.*"
ghcr.io/jaehyojjang/image_test   0.1       537ef80c8483   22 minutes ago   136MB

Container Registry는 ghcr.io/<OWNER>/<IMAGE-NAME>의 형식을 사용한다. 참고로 Container Registry는 Packages와 달리 저장소에 생기는게 아니라 사용자나 조직 같은 계정 밑에서 관리가 되기 때문에 주소에 저장소 이름이 들어가지 않는다.


이제 ghcr에 로그인을 했으므로 이미지를 푸시할 수 있게 되었다.

$ docker push ghcr.io/jaehyojjang/image_test:0.1

컨테이너 이미지 저장소 관리

위에서 푸시한 이미지는 자신의 계정의 패키지 탭에서 볼 수 있다
(https://github.com/jaehyojjang?tab=packages)
image


방금 올린 이미지가 등록되어 있는 것을 볼 수 있고 현재 Private로 등록된 상태이다. 이미지를 클릭하면 올라온 버전과 pull 방법 들을 자세히 알 수가 있다.
image


패키지 설정에 들어가면 누구나 해당 이미지를 받을 수 있도록 Public으로 변경할 수 있다.
image

마무리

당연한 애기겠지만 Private로 설정되어 있는 이미지의 경우 로그인 하지 않으면 다운로드 받을 수 없다.


Loading script...