얼마전, 도커허브에 대한 정책이 발표 되어 Registry의 대체재를 찾는중 Github에서 베타로 제공하는 부분이 있다.
그래서 해당 서비스를 활용해보고자 어떤 설정을 가지고 사용해야 하는지 확인해 봐야할 것 같다.

도커허브 제한으로 대체재를 찾기 위한 삽질기 참고

Github Container Registry 란?

github container registry (이하 ghcr)은 깃허브에서 제공하는 컨테이너 레지스트리 서비스이다.
현재 오픈 베타 기간이며, 장점은 아래와 같다.

  • Public 저장소 완전 무료!
  • Private 저장소는 500MB 까지 무료, 이후는 비용이 청구되기 때문에 이 부분은 애매하다.

그래서 개인 개발자가 퍼블릭하게 사용하기에는 Github Container Registry가 가장 적합하지 않나 싶다.

 

전체 프로세스

github에서 Registry에 컨테이너 이미지를 Push 하는 프로세스는 아래와 같다.

전체 프로세스

가이드

1. Docker Container Registry 기능 활성화

현재 Docker Container Registry는 현재(2020.12.07 기준) 퍼블릭 베타이므로 기능 활성화를 해야 사용할 수 있다.

우측 상단의 개인 프로필 클릭 -> Feature preview 를 클릭한다.

Improved container support에서 [Enable] 버튼을 클릭해서 활성화 한다.

 

 

 

 

2. Github Personal Access Token 생성

github container registry 에 로그인을 하기 위해서는 토큰을 생성하고 Container Registry에 대한 CRUD 권한을 부여해야 한다.
아래와 같이 설정한다.

먼저 github에 접속 -> 우측상단의 Profile 클릭 -> Settings -> Developer Settings -> Personal access tokens -> Generate new token 클릭해서 Token 생성 

 

Personal access tokens 를 클릭한다.

Personal access tokens 클릭

Generate new token 버튼을 클릭해서 토큰을 생성한다.

toen 생성 화면에서 Note 부분에 토큰 이름을 주고 Select scopes 섹션에서 아래와 같이 권한을 부여하고 [Generate token] 버튼을 클릭해서 토큰을 생성한다

Container Registry 권한 부여

그러면 아래와 같이 토큰이 생성된다. 토큰 정보는 생성직후만 확인 가능하므로 개인저장소에 안전하게 보관해야 한다.

필자는 토큰정보를 github-docker-token 라는 파일로 데스크탑에 저장해 두었다.

 

3. Github Container Registry 로그인

아래 명령어를 통해서 Github Container Registry로 로그인 한다.

cat 토큰파일 | docker login ghcr.io -u {github Id 입력} --password-stdin

# 실제 테스트
cat github-docker-token | docker login ghcr.io -u gblee87 --password-stdin

Login Succeeded 로 성공 메시지가 표시된다.

4. Container 이미지 푸시

자! 이제 컨테이너 이미지를 푸시해보자.
Github의 Container Registry 는 아래와 같은 형태로 구성할 수 있다.

ghcr.io/계정ID/이미지명:태그

기존에 준비된 nginx 이미지를 태깅하고 푸시한다.

// tagging
docker tag nginx:latest ghcr.io/gblee87/nginx:latest

// push
docker push ghcr.io/gblee87/nginx:latest

도커 이미지를 github container registry에 푸시한다.

이제 실제로 이미지가 올라갔는지 github.com 에서 확인해보자.

nginx 이미지가 올라가 있다. 기본은 Private으로 올라가므로 Public으로 바꿔보자.

패키지 이름을 클릭하고 나오는 상세화면 우측에서 [Package Settings] 를 클릭한다.

변경된 화면에서 [Make Public] 을 클릭해서 퍼블릭 레지스트리로 변경한다.

팝업창에서 이미지 이름을 입력하고 [I understand the consequences, change visibility to public] 버튼을 클릭한다.

패키지를 확인해보면 Private 라벨이 사라진 것을 확인할 수 있다.

 

결론

깃허브에서 제공하는 Container Registry는 굉장히 강력한 기능을 제공하고 있다. 공개용으로는 무제한적으로 저장공간을 사용할 수 있으며, 리퀘스트 요청의 제한도 없다. 다만, Private Registry는 유료 플랜으로 써야 하지만 개인 개발자가 쓰기에는 충분하다고 생각이 된다.

+ Recent posts