[Docker] Github와의 연동

2023. 2. 28. 00:50Tools/Docker

 

0. 참고자료

 

출처 : https://youtu.be/cqlY1Hc70H0

 


1. Github와 Docker의 만남

 

왜 만남?

 

기본적으로 생성한 이미지를 dockerhub에 업로드할 수 있다.

 

하지만 dockerhub에서는 무료 비공개 업로드는 하나밖에 안 된다.

 

그래서 다수의 비공개 업로드를 위해서 Github를 활용할 필요가 있다.

 


2. Container Registry

 

 

Github의 Packages에서는 Container Registry라는 기능을 제공한다.

 

(Docker는 현재 Container Registry로 대체되었다.)

 

 

Working with the Container registry - GitHub Docs

About the Container registry The Container registry stores container images within your organization or personal account, and allows you to associate an image with a repository. You can choose whether to inherit permissions from a repository, or set granul

docs.github.com

 

무료로 제한 없이 비공개 저장소를 이용할 수 있다.

 

가. 인증하기

 

Github에 접근할 수 있는 권한을 가지고 있을 인증하기 위해서 Personal access tokens을 발급받아야 한다.

 

  • Setting → Developer settings → Personal access tokens → Token → Generate new token

 

 

  • Note : 토큰의 용도를 기입한다.
  • Expiration : 유효기간을 설정한다.
  • Select scopes : 토큰으로 수행할 수 있는 작업들을 선택한다.

 

 

Container Registry로 활용하기 위해서는 위와 같은 수준의 권한이 필요하다.

 

 

생성된 토큰 값은 이후로 다시 볼 수 없으니 안전한 곳에 따로 저장해 두자.

 

export CR_PAT=토큰값

 

위의 코드를 사용하는 shell의 설정파일에 추가하자.

 

환경변수를 추가하는 것이다.

 

나는 zsh을 사용하기 때문에 .zshrc에 넣었다.

 

shell을 재부팅한다. source .zshrc도 괜찮다.

 

echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
  • ghcr.io : Github Container registry service로 로그인하기.
  • -u : github id
  • --password-stdin : github password로 echo $CR_PAT를 입력(standard input)받겠다.

 

토큰을 이용해서 로컬에서 로그인한다.

 


3. 이미지 Push하기

 

이미 my_con 이라는 컨테이너가 있다고 가정한다.

 

해당 컨테이너를 이미지로 만들고 Registry에 push하고 싶은 경우 아래의 절차대로 수행한다.

 

가. commit

docker commit my_con ghcr.io/NAMESPACE/이미지이름:버전
  • NAMESPACE : the name of the personal account or organization to which you want the image to be scoped.

 

이미지를 만들었다.

 

이제 Github Container registry service에 저장하고자 한다.

 

docker push ghcr.io/NAMESPACE/이미지이름:버전

 

 

이렇게 이미지가 push된 것을 볼 수 있다.

 


4. Github Packages

 

 

Packages를 클릭하면 pull할 수 있는 명령어가 보인다.

 

또한 이미지를 버전별로 관리되는 것을 볼 수 있다.

 

 

각 버전별로 따로 pull할 수 있고 또한 Dockerfile에서 base image로 활용할 수 있다.

 

가. Package settings

 

 

Package settings에서는 멤버를 추가 및 삭제할 수 있다.

 

여기서 package의 공개, 비공개 설정 그리고 삭제를 수행할 수 있다.

 

나. 저장소와 연결하기

 

 

버튼을 눌러서 연결하면 저장소의 우측 하단에 같이 추가된 것을 볼 수 있다.

 

 

저장소에 연결하면 packages setting이 이렇게 변화한다.

 

  • inherit access from source repository (recommended)
    : 체크하면 연결된 저장소로 해당 package에 대한 권한을 부여한다.
    : 저장소의 멤버마다 package에 대한 권한을 다르게 부여하고 싶다면 저장소의 access settings에서 설정할 수 있다.

 

 

Package setttings에서 저장소와의 연결을 끊을 수 있다.

 


'Tools > Docker' 카테고리의 다른 글

[Docker] MySQL 설치  (0) 2023.03.10
[Docker] Multi-architecture build  (0) 2023.03.07
[Docker] 연습하기  (2) 2023.02.27
[Docker] Compose  (0) 2023.02.27
[Docker] 가상화된 Docker host에 접근하기  (0) 2023.02.27