Notice
Recent Posts
Recent Comments
Link
Archives
Today
Total
관리 메뉴

윤서율의 블로그

Oracle Cloud Container Registry 사용법 본문

Cloud

Oracle Cloud Container Registry 사용법

Yoon Seo-yul 2022. 4. 30. 00:01

Container Registry란?

이해하기 쉽게 표현하자면 말 그대로 컨테이너의 저장소로 익히 알려져있는 Docker hub와 같은 서비스이다. 이를 Oracle Cloud에서는 Container Registry라고 표현했다.

특징

Oracle Container Registry의 대조군으로 AWS ECR을 들 수 있다.

Oracle Cloud Cotainer Registry

프리티어의 경우 10GB까지 무료로, 요금제는 Oracle Object Storage와 같은 방법으로 과금된다.

AWS Public ECR

50GB까지 퍼블릭 스토리지가 무료로 제공된다. 익명 사용자가 이미지를 Pull하는 경우 월 500GB 까지 가능하다. 인증된 사용자는 5TB 까지 가능하다.

프리티어에 대한 생각

AWS의 ECR이 프리티어 내에서는 Oracle Container Registry보다 혜택이 좋다고 보인다. 그런데 오라클은 무려 Kubernetes를 실행하는 데 사용할 수 있는 관리형 서비스 OKE가 무료다! ECR만 사용하면 되는거 아닌가 싶은데 멀티 플랫폼은 귀찮으니까 10GB가 부족하면 넘어가보자,,

Oracle Cloud Container Registry

환경

  • oci 사용
  • docker 사용

관리를 위한 policy 추가

cli를 통해 저장소를 이용하기 위해서는 먼저 정책을 할당해줘서 권한을 부여해야한다. 안그럼 다음과 같은 에러를 만나게 될 것이다. 문서를 꼼꼼하게 읽지 않아 삽질을 했다.
Error response from daemon: Get "https://xxx.ocir.io/v2/": unknown: Unauthorized
사용하려고 하는 사용자(User)에게 아래 정책을 추가해준다
Allow group Administrators to manage repos in compartment dev
dev compartmet를 사용중이라서 해당 저장소에대한 관리 권한을 Administrators 그룹에게 부여했다.

Push 방법

  1. cli에서 docker container registry에 로그인한다.

docker login <region-key>.ocir.io

# 예시
# iad를 사용하는 region-key
docker login iad.ocir.io
  1. 로그인 명령을 보내면 사용자 이름을 입력하라고 나온다.

<tenancy-namespace>/<username>

  • tenancy-namespace는 테넌시의 자동 생성된 Object Storage 네임스페이스 이름이다.
  • 우측 상단 > 프로파일 > 테넌시 > 오브젝트 스토리지 네임스페이스에서 확인하거나 Container Registry에서 알 수 있다.
# 예시
ansh81vru1zp
  1. 다음 암호 입력에 Oracle에서 발급받은 인증 토큰을 사용한다.
  • 인증토큰을 만들어야 한다. 우측 상단 프로파일 > 사용자명 클릭 > 인증 토큰 > 토큰 생성
  • 설명에 토큰에 대한 임의의 설명을 적고 생성. 토큰 복사
  1. 푸시하기 위해 tag를 이용한다.

docker tag <image-identifier> <target-tag>

# 예시
docker tag 8e0506e14874 iad.ocir.io/ansh81vru1zp/project01/acme-web-app:version
  • image-identifier는 저장소 이름:이미지 태그 를 의미한다. docker에서는 images 했을때 나오는 RESPOSITORYLTAG로 볼 수 있다.
  • target-tag는 위에서 알아낸 값을 조합한다.
<region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<tag>
  • 이미지 생성을 확인하고 docker push <target-tag>를 사용한다.
docker push <target-tag>
# 예시
docker push iad.ocir.io/ansh81vru1zp/project01/acme-web-app:version2.0.test

성공!
이것으로 Oracle Cloud Container Registry를 사용하기 위한 정책, 사용자 인증 세팅과 이미지 업로드가 끝났다.

pull 방법

push를 했다면 Pull을 해서 사용하는 방법도 알아야 제대로 기능을 사용한다고 말할 수 있다.
방법은 간단하다.

docker pull <region-key>.ocir.io/<tenancy-namespace>/<repo-name>:<tag>

용어 설명은 하지 않는다. push 방법에서 설명한 내용과 동일하다.

k8s에서 pull

당연히 이 문서를 보는 분이라면 k8s에서 사용하기 위해서 찾고 있었을거라 생각한다. 이또한 매우 간단하다.

  • 시크릿 만들기
    저장소에서 접근하기위해 인증 토큰을 사용하였다. 쿠버네티스에서 접근하는 방법도 동일하다. 이때, 인증토큰을 시크릿에 세팅해서 읽어오는 방법을 사용한다! 쿠버네티스를 사용하는 방법이기 때문에 여기서 자세한 설명은 하지 않는다. 이 글을 읽으시는 분들은 이미 알고 있다고 생각한다.
    kubectl create secret docker-registry <secret-name> --docker-server=<region-key>.ocir.io --docker-username='<tenancy-namespace>/<oci-username>' --docker-password='<oci-auth-token>' --docker-email='<email-address>'
    읽어보면 바로 느낌오는 명령어라고 생각한다.

시크릿 지정

이미지를 당겨오기 위해서 시크릿을 사용해야 하니 지정한다. 예시 파드.yaml로 대체한다. 이또한 쿠버네티스 영역이므로 자세한 설명은 하지 않는다.

apiVersion: v1
kind: Pod
metadata:
name: ngnix-image
spec:
containers:
 - name: ngnix
   image: phx.ocir.io/ansh81vru1zp/project01/ngnix-lb:latest
   imagePullPolicy: Always
   ports:
   - name: nginx
     containerPort: 8080
     protocol: TCP
imagePullSecrets:
 - name: ocirsecret

후기

해당 내용을 정리하고 보니 정말 간단하다. 그런데 이 방법을 찾으려고 시간이 꽤나 걸렸다. 필자가 영어를 못해서 그런지 오라클 클라우드 문서는 AWS에 비해서 뭔가 불편하게 느껴졌다. 친절한 영어가 아닌 느낌적인 느낌.. 이 문서가 많은 분들에게 도움이 되었으면 좋겠다.