카레제육 블로그
Oracle Cloud Container Registry 사용법 본문
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 방법
- cli에서 docker container registry에 로그인한다.
docker login <region-key>.ocir.io
# 예시
# iad를 사용하는 region-key
docker login iad.ocir.io
- region-key는 아래 링크에서 확인한다.
https://docs.oracle.com/en-us/iaas/Content/Registry/Concepts/registryprerequisites.htm#regional-availability
- 로그인 명령을 보내면 사용자 이름을 입력하라고 나온다.
<tenancy-namespace>/<username>
- tenancy-namespace는 테넌시의 자동 생성된 Object Storage 네임스페이스 이름이다.
- 우측 상단 > 프로파일 > 테넌시 > 오브젝트 스토리지 네임스페이스에서 확인하거나 Container Registry에서 알 수 있다.
# 예시
ansh81vru1zp
- 다음 암호 입력에 Oracle에서 발급받은 인증 토큰을 사용한다.
- 인증토큰을 만들어야 한다. 우측 상단 프로파일 > 사용자명 클릭 > 인증 토큰 > 토큰 생성
- 설명에 토큰에 대한 임의의 설명을 적고 생성. 토큰 복사
- 푸시하기 위해 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에 비해서 뭔가 불편하게 느껴졌다. 친절한 영어가 아닌 느낌적인 느낌.. 이 문서가 많은 분들에게 도움이 되었으면 좋겠다.