티스토리 뷰

진행하고 있는 프로젝트에서 테스트 데이터베이스 환경을 H2가 아닌 MySQL로 구성하였다. 따라서 CI를 진행할 때 동작하고 있는 MySQL 서버가 필요로 하게 된다.

 

CIGithub Action을 통해서 진행하는데, Github Action은 워크플로우가 실행될 때마다 매번 새로운 환경을 구성하기 때문에 워크플로우에서 프로젝트에서 정의한 테이블 정보를 가지고 있는 MySQL을 실행시켜 주는 작업이 필요하다.

 

Github Action에서 MySQL 실행을 도와주는 도구가 존재했지만, MySQL 서버를 설정하고 실행만 시켜주기에 테이블 생성과 같은 데이터베이스 초기화를 위해 추가적인 작업이 필요했다. 다른 방법을 추가적으로 고민하다 테이블 정보를 담은 DB 도커 이미지를 Github Action에 가져와 실행시켜 주는 방법을 떠올리게 되었다.

 

도커 이미지를 저장할 수 있는 공간은 다양하다. 가장 대표적으로 도커에서 제공하는 도커 허브가 있다. 도커 허브는 도커 이미지를 저장하고 공유하고 배포할 수 있는 클라우드 서비스이다. 아마존에서도 ECR(Elastic Container Registry)이라는 도커 컨테이너 이미지를 저장하고 관리할 수 있게 도와주는 서비스를 제공하고 있다.

 

테이블 정보만 담고 있는 DB이긴 하지만 데이터 정보나 구조 정보를 담고 있었기에 노출되지 않았으면 했지만, 위의 서비스들의 private repository를 이용하기 위해서는 요금이 발생하게 되었다. Github Action에서 쉽게 사용할 수 있고 private repository를 무료로 제공하는 서비스가 없는지 찾던 도중 Github Container Registry에 대해 알게 되었다.

 

Github Container Registry는 Github에서 제공하는 패키지 관리 서비스의 일종으로, 도커 컨테이너 이미지를 안전하게 저장하고 관리하고 배포할 수 있는 기능을 제공한다. private repository를 무료로 사용할 수 있고 도커 이미지가 Github Action에서 사용되기에 같은 곳에서 관리하면 좋을 것 같아 해당 서비스를 사용하게 되었다.

 

Github Container Registry를 직접 사용해 보고 사용법을 간단하게 정리해 보고자 글을 작성하게 되었다.

Github 토큰 생성

Github Container Registry에 도커 이미지를 올리게 되면 Packages에 도커 이미지가 된다. 개인 계정의 Packages를 사용하기에 Packages에 접근하여 이미지를 저장하고 가져오기 위해서는 권한이 필요하다. 따라서 해당 권한을 가지고 있는 Github 토큰 생성이 필요하다.

Settings > Develop Settings > Tokens (classic)에 들어오면 토큰 생성을 할 수 있다.

해당 페이지에서 Generate new token (classic) 버튼을 누르면 토큰을 생성할 수 있는 화면으로 이동한다.

토큰 이름을 입력하고 토큰 만료 기한을 선택 후 packages 사용을 위해 write:packages, read:packages, delete:packages를 수행할 수 있는 권한을 부여한다.

생성하기 버튼을 누르면 토큰을 확인할 수 있는데 한 번만 확인할 수 있기 때문에 별도의 장소에 저장해서 사용하도록 한다.

Github Container Registry

로그인

발급받은 토큰으로 Github Container Registry에 로그인할 수 있다.

docker login ghcr.io -u 유저이름 -p 토큰

터미널의 위의 형식에 맞게 입력하면 로그인할 수 있다. 해당 방법은 보안상 위험하다는 경고 메시지가 뜨기에 토큰값을 환경변수로 저장해 두고 로그인하는 방식도 존재하지만 간편해서 이 방법을 사용했다.

로그인이 정상적으로 성공했다면 위와 같은 메시지를 확인할 수 있다.

이미지 저장

이미지 네임스페이스 분리와 소유자 식별을 위해 이미지 이름의 형식을 맞춰줘야 한다.

ghcr.io/유저이름/이미지명:태그명

이미지명을 처음부터 위와 같은 형식으로 저장했다면 상관없지만, 위의 형식이 아니라면 아래 명령어를 통해 형식을 맞춰줄 수 있다.

docker tag 원래이미지명 ghcr.io/유저이름/이미지명:태그명

기존에 존재하던 redis 이미지를 형식에 맞는 이미지명으로 생성한 것을 확인할 수 있다.

docker push ghcr.io/woo-chang/redis:7.0.12

토큰을 통해 도커에 로그인된 상태로 생성한 이미지를 push 하면 이미지가 Packages에 정상적으로 저장된다.

저장된 후 Packages 탭을 들어가 확인하면 push 작업을 수행했던 이미지가 있는 것을 확인할 수 있다.

이미지 내려받기

이미지를 내려받는 작업 또한 이미지를 저장하는 작업처럼 로그인된 상태에서 진행이 가능하다.

docker pull ghcr.io/유저이름/이미지명:태그명

성공적으로 이미지를 가져오는 것을 확인할 수 있다.

'DevOps' 카테고리의 다른 글

[Docker] 도커란 무엇인가  (0) 2022.10.24
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Total
Today
Yesterday