GHCR 사용 계기
- Docker를 통해 배포를 진행할 때 DockerHub를 사용하여 이미지를 pull하고 push하는 방식을 사용하여왔다.
- 하지만 개발하고있는 프로젝트를 모두가 접근 가능한 DockerHub에 올린다면 누구나 이를 pull받아 실행할 수 있다는 문제가 있다.
- 무료 요금제로는 이미지 한개만 private으로 설정할 수 있다.
- 여러 개의 서버를 배포하여 개발하는 입장에서 이미지 저장소로 DockerHub가 아닌 다른 저장소를 모색하였다.
- 이에 조직 전체에서 공유 가능하고 private설정을 적용할 수 있는 Github Container Registry에 프로젝트 이미지를 저장시켜 배포 시 사용하도록 하였다.
사용 방법
- GHCR를 활용하기 위해서는 github 개인 계정에서 Personal Access Token을 받급받아야 한다.
- Settings > Developer Settings > Personal access tokens > Tokens (classic) > Generate new token

- 이때 해당 토큰으로 패키지 관련 작업을 하므로 패키지를 읽고 쓰고 삭제하는 권한을 설정해줘야 한다.

- write:packages에 체크하면 위에 repo관련 권한은 자동으로 체크된다.
- 이를 통해 토큰 발급이 가능하다.
사용
로그인
echo "personal access token" | docker login ghcr.io -u username --password-stdin
- 위에서 발급받은 토큰으로 도커에 로그인하여 ghcr.io에 접근 가능하다.
- ghcr.io는 github container registry 주소로서 해당 주소를 통해 이미지에 접근한다.
이미지 build
docker build -t ghcr.io/<org.name>/<image.name>:<tag> .
- 여기서 ghcr.io와 image.name 사이에는 본인의 username이나, organization의 이름을 입력하여 해당 이미지가 개인 계정의 소유가 될지 조직의 소유가 될지 결정할 수 있다.
- 이때 username 혹은 organization name은 소문자로 작성한다.
이미지 push
docker push ghcr.io/<org.name>/<image.name>:<tag>
- 이를 통해 github package에서 해당 이미지를 확인할 수 있다.
이미지 pull
docker pull ghcr.io/<org.name>/<image.name>:<tag>
- 해당 명령어를 통해 이미지를 pull받을 수 있다.
- pull전에 personal access token을 통해 도커 로그인하여 해당 이미지에 접근을 허가받아야 한다.