티스토리 뷰

CICD

[CI/CD] Harbor 간단 사용법

SungminKim 2024. 6. 23. 23:28


오늘은 Harbor를 사용하기 위한 기본정보와 간단한 사용방법에 대해 알아보려합니다.

 

1. 사전지식

Harbor는 오픈소스 레지스트리로써 도커 이미지를 저장하고 태그를 통해 버저닝하여 관리하며 문제가 없는지 스캔하는 서드 파티입니다.  이러한 Harbor 자세히 알기 이전에 도커 이미지와 컨테이너에 대해 우선 짚고 넘어가 보겠습니다. 

 

Docker Image란?

“도커 이미지는 소스 코드, 라이브러리, 종속성, 도구 및 응용 프로그램을 실행하는데 필요한 기타 파일을 포함하는 불변(변경 불가) 파일이다. 이미지는 읽기 전용이므로 스냅샷이라고도 하며, 특정 시점의 애플리케이션과 가상 환경을 나타낸다.”
- 출처 : Docker Container와 Image란 무엇인가?

 

 

이미지의 이름은 자신이 속해있는 '저장소 이름'과 '기본 이름' 그리고 버전을 표기하는 '태그'로 구성됩니다.

 

docker inspect 명령어 출력 결과 중 Layears 항목
3개 이미지의 레이어 구조

출처 : ‘시작하세요! 도커 & 쿠버네티스’

 

이미지는 여러개의 레이어 구조로 이루어질 수 있으며 실행중인 컨테이너(Container)를 이미지로 만들어 여러가지 버전의 이미지를 만들 있습니다.

 

 

Container 란?

컨테이너란, 이미지를 통해 생성되는 작은 서버입니다. 컨테이너는 이미지를 읽기 전용으로 사용하되 이미지에서 변경된 사항만 컨테이너 계층에 저장합니다. 즉, 컨테이너에서 무엇을 하든 원래 이미지는 영향을 받지 않습니다.

출처 : Docker Container와 Image란 무엇인가?

 

 

2. Harbor 개요

Harbor 란?

주로 특정 조직의 내부적으로 도커 이미지 관리를 위한 Private Docker Repository 용도로 사용되며, 도커 이미지 repository 뿐만 아니라 helm chart repository로도 역할이 가능합니다.

Helm Chart 란?
kubernetes의 리소스를 간편하게 배포하기 위한 패키지라고 생각하면 됩니다.(도커 컴포즈와 유사하다고 볼 수 있습니다.)

 

주요기능

  • Docker Image & Helm Chart Repository (Public/Private)
  • 정책 및 역할 기반 접근 제어(RBAC)를 통해 Artifacts를 보호
    (Harbor에서 사용되는 "Artifacts"라는 단어는 컨테이너화된 애플리케이션의 이미지나 구성 파일과 같은 요소들을 의미합니다.)
  • 이미지를 스캔하여 취약점이 없는지 확인 기능 보유 (스캐너 오픈소스인 trivy 또는 clair 사용)

출처 : 컨테이너_이미지_취약점_분석_및_모니터링

  • 이미지를 신뢰할 수 있는지 검토하기 위한 서명 여부 확인 기능 보유 (Sign)
  • 이미지에 tag 부여 및 수정 기능 보유
  • 이미지를 분류하기 위한 라벨링 기능 보유 (Label)
  • 그외 Robot Acount, P2P Preheat, Policy, webooks 기능을 제공

 

Harbor를 사용해야하는 이유?

  1. 이미지 관리가 용이
    - 팀원 누구나 쉽게 이미지에 태그를 부여하고 수정할 수 있음으로 이미지의 버전 관리가 쉽습니다.
    - 이미지 생성/삭제에 대한 로그를 별도로 쉽게 확인이 가능합니다.
  2. 이미지를 주기적으로 삭제하는 기능(tag retention)을 보유.
  3. GUI가 제공됨으로 사용하기가 편함.

 

다른 대안은?

https://bluelight.co/blog/how-to-choose-a-container-registry

 

How to Choose a Container Registry: The Top 9 Picks

Understanding what to look for is crucial to choosing the right container registry for your software development needs

bluelight.co

대표적인 대안 중 Docker Hub도 하버와 유사한 기능들을 가지고 있지만, Personal(무료) 이용시 일부 제한이 있습니다. (시간당 Image Pull 횟수 제한, Private Repository 보유 개수 제한 등)

 

 

3. Harbor 간단 사용법

Harbor는 여러가지 기능 편리하게 제공할 수 있도록 웹 기반의 사용자 인터페이스(Harbor Portal)를 제공하고 있습니다. 

 

Harbor Portal 사용법

Projects

Harbor Potal에서 로그인한 후 첫 화면입니다. 여러개의 repository를 묶는 최상위 개념인 Project들의 목록을 확인할 수 있습니다.

 

 

Projects > Project

해당 경로의 페이지에서는 특정 Project에서 포함된 repository들의 목록을 확인 가능합니다.

PUSH COMMAND를 통해 특정 repository에 image를 push 하기 위한 tag, push 명령어 템플릿을 제공하고 있습니다.

 

Projects > Project > Repository

해당 경로의 페이지는 특정 repository에 push된 이미지의 digest들을 Artifact라는 명칭으로 항목화하여 목록을 표시합니다.

 

  • 상단 SCAN 기능은 Trivy&Clair(이미지 스캔 오픈소스)를 추가해야 활성화 됩니다.
  • 'Pull Commend' 항목에 속하는 아이콘을 클릭 시 해당 이미지의 Pull 명령어를 클립 보드에 저장할 수 있습니다.

  • 'Actions' 항목은 체크한 특정 artifact에 대한 개별적인 기능을 실행할 수 있습니다.
    - artifact의 digest(다이제스트) 값 복사 가능
    - label 부여 가능
    - 다른 project에 해당 artifact 복제 가능
    - artifact 삭제 가능
Digest 란?
도커 이미지는 이미지에 대한 정보를 저장하는 매니페스트와 실제로 이미지에 레이어 파일을 저장하는 바이너리 파일로 나뉩니다. 그리고 매니페스트와 각 레이어에 해당하는 파일은 서로 고유하게 식별하기 위한 ID로 Digest(다이제스트) 값을 가집니다. 그리고 다이제스트는 이미지 자체에 대한 변조를 방지를 하기 위해 보안을 강화 용도로을 사용됩니다. 또한 매니페스트와 레이어에 부여된 다이제스트는 컨테이너 레지스트리에 저장된 이미지를 제어할 때 사용됩니다. 추가적으로 digest와 관련된 내용은 링크를 참고 부탁드립니다.

 

 

Projects > Project > Repository > Artifact

해당 경로의 페이지는 특정 artifact(image digest)의 세부 정보를 표시하고 있습니다.

'ADD TAG를' 통해 원하는 tag를 추가하거나, 'REMOVE TAG'를 통해 특정 tag를 제거 가능합니다.

 

 

4. 간단한 이미지 PUSH 방법

실행을 위한 기본 조건

docker deamon을 이용해서 harbor registry에 로그인할 때 https요청이 아닌 http요청을 사용할경우 insecure설정 해주셔야합니다.

a. 로그인 전 docker가 신뢰할 수 있는 registry 로 등록.
(Mac 기준)vi ~/.docker/daemon.json 명령어를 실행하여 아래 스크립트 기재

{
        ...
        
        "insecure-registries": [
           "harbor server IP:harbor PORT" (or "DOMAIN")
        ]
}

b.  docker login [harbor server IP]:[harbor PORT] 명령어로 로그인([harbor server IP]:[harbor PORT]를 대신하여 도메인을 입력하여 로그인도 가능합니다. 저는 별도의 도메인이 없이 진행했음으로 [harbor server IP]:[harbor PORT] 진행했습니다.)

 

push

1. docker tag SOURCE_IMAGE:TAG  [harbor server IP]:[harbor PORT]/project명/repository명:TAG

 

2. docker push [harbor server IP]:[harbor PORT]/project명/repository명:TAG

push된 digest가 출력되는 것을 확인 가능합니다.

 

3. push 상태 확인

repository 내부에 저장된 이미지를 확인

 

tagging

1. latest 태그 삭제 후 태그 추가

 

2. 추가된 태그 반영 확인

 

pull

1. 'Pull Command' 아이콘 클릭하여 pull 명령어를 클립보드에 저장.

 

2. 저장한 pull 명령어 터미널에서 실행

만약, pull 명령을 통해 받는 이미지가 기존에 로컬에 존재하는 이미지일 경우 pull 과정을 스킵합니다.

 

3. 이미지 확인

docker image inspect [image ID]

harbor artifact의 명칭으로 사용되는 digest의 해쉬코드를 이미지 상세 정보를 통해 확인할 수 있었습니다.

 


 

지금까지 Harbor란 무엇인지, 어떻게 사용하는지에 대해서 알아보았습니다. 

많은 기업에서 ‘MFA(Multi-Factor Authentication) for Image Push/Pull’ 기능이
가능한 컨테이너 레지스트리를 선호하기때문에 제 개인적인 생각으로는 Harbor는 지속적으로 사용할 것으로 예상됩니다. 

이것으로 이번 글 마무리하겠습니다.
읽어주셔서 감사합니다~!

 

 

'CICD' 카테고리의 다른 글

[CI/CD] Jenkins cleanws 문제 해결 과정  (0) 2024.02.20
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday