티스토리 뷰

728x90
반응형

앞선 포스팅에서는 Harbor Docker & Helm Repository를 구축하고 구성하는 방법에 대해 살펴보았다. 이번 포스팅에서는 Harbor를 활용할 수 있는 몇가지 방법에 대해 알아보도록 하자.

 Harbor Project 생성 

Project Create

Harbor Project는 하나의 Repository 단위를 표현하며, Docker Repository, Helm Repository, File Repository 또는 그 묶음을 표현할 수 있다. 본 가이드에서는 helm-project & docker-project를 각각 생성하도록 한다.

 Docker Image 관리 

다음으로 도커 이미지 관리이다. 많은 프로젝트에서 Nexus를 사용하고 있지만, Nexus는 Docker Registry가 주된 기능이 아닌 통합 Repository 개념으로 세분화된 기능을 제공하고 있지는 않다.

Harbor는 Docker Registry이외에 Garbage Collection, Docker Image 취약점 점검 등의 부가 기능을 추가로 제공하여 관리헤 용이성을 제공한다.

먼저 Docker Repository로써의 이미지 관리 방법에 대해 알아보자.

- Docker Insecure Registry 등록

[root@ciserver harbor]# vi /etc/docker/daemon.json 
{
        "insecure-registries":["192.168.56.100"]
}
[root@ciserver harbor]# systemctl restart docker
[root@ciserver harbor]# 

- Docker Login

[root@ciserver harbor]# docker login 192.168.56.100
Username (admin): admin
Password: 
Login Succeeded
[root@ciserver harbor]# docker login 192.168.56.100 -u admin -p [PW]
Login Succeeded
[root@ciserver harbor]#

위와 같이 두가지 형태로 로그인이 가능하다.

- Docker Tag 생성 및 Push

[root@ciserver harbor]# docker tag nodejs:latest 192.168.56.100/docker-project/nodejs:v1.0
[root@ciserver harbor]# docker push 192.168.56.100/docker-project/nodejs:v1.0
The push refers to a repository [192.168.56.100/docker-project/nodejs]
ecb31c576ac5: Pushed 
13d672483c83: Pushed 
72ae45f45b21: Pushed 
c0a3b569ce27: Pushed 
a0dec5cb284e: Pushed 
03d91b28d371: Pushed 
4d8e964e233a: Pushed 
bc17cd405095: Pushed 
ee854067fbbd: Pushed 
740ffea5d5c3: Pushed 
eac9ead92b24: Pushed 
23bca356262f: Pushed 
8354d5896557: Pushed 
v1.0: digest: sha256:4df13ab3e925d33f0334adc1f1cffceab98848090c302e6b5cd70d871fdef8e6 size: 3052
[root@ciserver harbor]#

- Harbor Repository 확인

- Docker Pull

[root@ciserver harbor]# docker rmi 192.168.56.100/docker-project/nodejs:v1.0
Untagged: 192.168.56.100/docker-project/nodejs:v1.0
Untagged: 192.168.56.100/docker-project/nodejs@sha256:4df13ab3e925d33f0334adc1f1cffceab98848090c302e6b5cd70d871fdef8e6
[root@ciserver harbor]# docker pull 192.168.56.100/docker-project/nodejs:v1.0
Trying to pull repository 192.168.56.100/docker-project/nodejs ... 
v1.0: Pulling from 192.168.56.100/docker-project/nodejs
Digest: sha256:4df13ab3e925d33f0334adc1f1cffceab98848090c302e6b5cd70d871fdef8e6
Status: Downloaded newer image for 192.168.56.100/docker-project/nodejs:v1.0
[root@ciserver harbor]# 

Docker 관련 기본 명령어 레벨이므로 추가 설명은 생략한다. 이와 같이 일반적인 Docker Image를 Push하고 Pull하는 Registry를 구성할 수 있다.

 Docker Image 취약점 분석 

다음으로 Docker Image 취약점 분석을 진행해 보자. 이미지 분석은 Clair를 통해 진행하며, --with-clair 옵션을 기동 시점에 추가하였다면, 별다른 구성없이 Harbor 대시보드에서 사용할 수 있다.

위와 같이 Projects → docker-project → Repositories Tab → docker-project/nodejs (DockerImage) → v1.0(tag) → Scan 버튼을 클릭하면 Clair를 통한 이미지 분석을 진행할 수 있다.

위는 이미지 분석이 완료된 화면이다. 위와 같이 Critical, High, Medium, Low, Negligible, Unknown Level로 구분된 결과를 리포팅 받을 수 있으며, 각 프로젝트에 맞는 정책을 수립하여 관리하는 것이 중요하다. 예를 들어 최소 High 이상의 취약점은 조치한 후 적용해야 한다던지 등의 레벨을 정의하고 이미지를 관리하는 것이 중요하다.

여러 태그 별 이미지 분석이 완료되면, Tag 별 이미지를 확인할 수 있는 Projects → docker-project → Repositories Tab → docker-project/nodejs (DockerImage) → v1.0(tag) 레벨에서 각 이미지 태그 위에 마우스를 드랍다운하면, 다음과 같이 분석 결과에 대한 그래프를 확인할 수 있다.

 Docker Image Garbage Collection 

다음으로 Docker Image를 정리하기 위한 GC에 대해 알아보자. Nexus 등의 Docker Repository를 사용하다보면 Docker Image의 누적으로 인해 디스크가 Full이 나는 현상이 종종 발생한다. 이때, Docker Image를 삭제하는 것은 굉장히 번거롭고, 까다로운 일이 아닐 수 없다.

Docker는 파일 단위가 아닌 Layer 단위로 구성되어 있으며, 각 Layer는 많은 도커 이미지간의 Reference 관계를 갖고 있다. 이 Layer는 Meta 정보로 관리되고 이를 사용하고 있는지 여부를 눈으로 확인하는 것은 사실상 매우 어려운 일이다.

이로 인해 Docker는 GC 기능을 제공하는데 우리가 일반적으로 알고 있는 Java GC와 동일하게 생각할 수 있다.

현재 Registry에 Push 된 이미지 중 Reference 관계가 없는 Image Layer의 Blob Data를 삭제하는 기능을 Harbor는 제공한다.

위와 같이 현재 여러 버전의 Docker Image 들이 누적되어 관리되어 지고 있다고 가정하고, Docker Image Garbage Collection에 대해 알아보자.

다음과 같이 왼쪽 메뉴의 Garbage Collection을 선택한다.

기존 Docker Image를 정리하기 위해 수동으로 Docker Garbage Collection을 수행하던 방식으로 자동으로 관리해 주는 매우 유용한 기능이다. 동작 역시 GC NOW 버튼을 클릭하기만 하면 되는 매우 간단한 방식으로 시간, 일, 주 단위 또는 cron으로 보다 세분화된 GC 수행을 반복적으로 실행 시킬 수도 있다. 

위는 실제 Docker GC가 수행된 결과이다.

이번 포스팅에서는 Docker Image를 관리하는 Repository에 대해 살펴보았다. Harbor는 Docker Image 취약점 분석을 위한 Clair와 Docker Image 삭제를 위한 Garbage Collection 기능은 물론 Version 관리, 저장소 등의 Repository 역할을 하는 종합적인 기능으로써의 Docker Repogitory 역할을 하는 오픈소스라 할 수 있다.

다음 포스팅에서는 마지막으로 Helm Chart Repository로써의 Harbor에 대해 알아보도록 하자.

728x90
반응형