지난 포스팅에서 RHEL 8.4 환경에 Harbor를 성공적으로 설치했습니다. 이제 설치된 Harbor를 활용하여 컨테이너 이미지를 효과적으로 관리하는 방법을 알아볼 차례입니다. Harbor는 단순히 이미지를 저장하는 것을 넘어, **프로젝트별로 리포지토리를 구성하고 이미지를 푸시하며 보안 기능을 통합**하는 등 다양한 기능을 제공합니다.
이번 가이드에서는 Harbor에 새로운 **프로젝트를 생성**하고, 로컬 Docker 환경에서 준비된 **컨테이너 이미지를 Harbor 리포지토리에 푸시(Push)하는 구체적인 방법**을 상세히 정리합니다. Harbor를 활용한 프라이빗 컨테이너 이미지 관리의 첫걸음을 함께 시작해 봅시다!
목차
1. Harbor - 프로젝트 생성
Harbor에서 **프로젝트(Project)**는 하나의 독립적인 리포지토리 단위를 의미합니다. 각 프로젝트는 별도의 접근 권한, 이미지 관리 정책 등을 가질 수 있어, 조직 내 다양한 팀이나 애플리케이션별로 이미지를 체계적으로 관리하는 데 매우 유용합니다.
Harbor 웹 UI에 로그인한 후, 좌측 메뉴에서 **'Projects'**를 선택하고, 우측 상단의 **'NEW Project'** 버튼을 클릭하여 새 프로젝트를 생성합니다.
프로젝트 생성 창에서 원하는 프로젝트 이름(예: hk-repo
)을 입력하고 필요한 설정을 한 후 'OK'를 클릭하면 됩니다.
아래와 같이 성공적으로 프로젝트가 생성된 것을 확인할 수 있습니다.
생성된 프로젝트(예: hk-repo
)를 클릭하여 상세 페이지로 들어가면, 우측에 **"PUSH COMMAND"**라는 유용한 버튼이 있습니다. 이 버튼을 선택하면 해당 프로젝트에 이미지를 태그하고 푸시하는 방법에 대한 구체적인 가이드를 제공합니다. Docker 이미지뿐만 아니라 Helm 차트 및 CNAB(Cloud Native Application Bundle) 명령에 대해서도 가이드를 받을 수 있어 매우 편리합니다.
2. Harbor - 리포지토리 생성 및 이미지 푸시
이제 생성된 프로젝트에 실제 컨테이너 이미지를 푸시하여 리포지토리를 만들고 이미지를 저장해 봅시다. Harbor의 "PUSH COMMAND" 가이드에서 제시하는 두 가지 핵심 단계를 따릅니다.
- Tag an image for this project:
docker tag SOURCE_IMAGE[:TAG] 55.55.31.12:8080/hk-repo/REPOSITORY[:TAG]
- Push an image to this project:
docker push 55.55.31.12:8080/hk-repo/REPOSITORY[:TAG]
여기서 55.55.31.12:8080
은 Harbor가 설치된 서버의 IP 주소와 포트이며, hk-repo
는 위에서 생성한 프로젝트 이름입니다.
2.1. 현재 Docker 이미지 확인
Harbor에 푸시할 로컬 Docker 이미지가 있는지 확인합니다. 다음 명령어를 사용하여 현재 시스템에 다운로드되어 있는 Docker 이미지 목록을 볼 수 있습니다.
[root@rhocp-registry harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
goharbor/harbor-exporter v2.3.4 41f7fb260d0d 2 weeks ago 81.1MB
goharbor/chartmuseum-photon v2.3.4 f460981da720 2 weeks ago 179MB
goharbor/redis-photon v2.3.4 e4780c57b230 2 weeks ago 155MB
goharbor/trivy-adapter-photon v2.3.4 af0652363af0 2 weeks ago 130MB
goharbor/notary-server-photon v2.3.4 66c118fdbe3e 2 weeks ago 110MB
goharbor/notary-signer-photon v2.3.4 27d49a4ae0d3 2 weeks ago 108MB
goharbor/harbor-registryctl v2.3.4 0daeaba57fc6 2 weeks ago 133MB
goharbor/registry-photon v2.3.4 8497f259228a 2 weeks ago 81.9MB
goharbor/nginx-photon v2.3.4 2218fcda1ff0 2 weeks ago 45MB
goharbor/harbor-log v2.3.4 4d507b2e8131 2 weeks ago 159MB
goharbor/harbor-jobservice v2.3.4 5924b12f0b85 2 weeks ago 211MB
goharbor/harbor-core v2.3.4 dc8b74f8c4f3 2 weeks ago 193MB
goharbor/harbor-portal v2.3.4 770e6950323b 2 weeks ago 58.2MB
goharbor/harbor-db v2.3.4 8e2ed50e4699 2 weeks ago 228MB
goharbor/prepare v2.3.4 cce1a590410d 2 weeks ago 254MB
위 목록은 Harbor 설치 시 함께 다운로드된 기본 이미지들입니다. 이제 Harbor에 푸시할 새로운 이미지를 준비해 보겠습니다.
2.2. 테스트 이미지 다운로드
테스트를 위해 Docker Hub에서 공개적으로 사용 가능한 mariadb
이미지를 다운로드합니다.
[root@rhocp-registry harbor]# docker pull mariadb
Using default tag: latest
latest: Pulling from library/mariadb
7b1a6ab2e44d: Pull complete
034655750c88: Pull complete
f0b757a2a0f0: Pull complete
4bbcce26bc5e: Pull complete
04f220ee9266: Pull complete
89c8a77f7842: Pull complete
d1de5652303b: Pull complete
ef669123e59e: Pull complete
e5cec468d3a6: Pull complete
b14b1ba1d651: Pull complete
Digest: sha256:0f04ae6f30c5a3295fb7cc9be5780c15ff21d6028f999b19f5803114c1e8559e
Status: Downloaded newer image for mariadb:latest
docker.io/library/mariadb:latest
docker pull
명령어를 사용하여 mariadb:latest
이미지가 성공적으로 다운로드되었습니다. 다시 docker images
명령어로 목록을 확인하여 mariadb
이미지가 추가된 것을 볼 수 있습니다.
[root@rhocp-registry harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mariadb latest e2278f24ac88 2 weeks ago 410MB
goharbor/harbor-exporter v2.3.4 41f7fb260d0d 2 weeks ago 81.1MB
... (생략) ...
2.3. Harbor 리포지토리용 이미지 태그 설정
다운로드한 mariadb
이미지를 Harbor 리포지토리로 푸시하려면, Harbor의 주소와 프로젝트 이름을 포함하는 형태로 이미지 태그를 다시 지정해야 합니다. 이것은 Docker가 이미지를 어느 레지스트리의 어느 리포지토리로 보낼지 알게 하는 과정입니다.
[root@rhocp-registry harbor]# docker tag mariadb:latest 55.55.31.12:8080/hk-repo/mariadb:latest
이 명령은 mariadb:latest
이미지에 55.55.31.12:8080/hk-repo/mariadb:latest
라는 새로운 태그를 부여합니다. 원본 이미지는 유지된 채, 새로운 참조가 추가됩니다.
2.4. Harbor 레지스트리 로그인
Harbor에 이미지를 푸시하기 전에, Docker 클라이언트가 Harbor 레지스트리에 인증해야 합니다. 이전에 harbor.yml
파일에 설정했던 관리자 계정(admin
)과 비밀번호(root123
)를 사용하여 로그인합니다.
[root@rhocp-registry harbor]# docker login https://55.55.31.12:8080
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
로그인 시 비밀번호는 터미널에 표시되지 않습니다. 비밀번호를 입력한 후 'Enter'를 누르면 Login Succeeded
메시지가 나타납니다. 경고 메시지는 비밀번호가 평문으로 저장될 수 있음을 알리는 것이며, 프로덕션 환경에서는 자격 증명 도우미를 설정하여 보안을 강화하는 것이 좋습니다.
2.5. 이미지 푸시(Push)
이제 모든 준비가 끝났습니다. 태그를 설정한 이미지를 Harbor 레지스트리로 푸시합니다.
[root@rhocp-registry harbor]# docker push 55.55.31.12:8080/hk-repo/mariadb:latest
The push refers to repository [55.55.31.12:8080/hk-repo/mariadb]
c359e781d90a: Pushed
f95954e05332: Pushed
060b534c4abd: Pushed
672465781193: Pushed
6c649bbdd7d6: Pushed
286a90349ea9: Pushed
eb3b55e3972c: Pushed
8f2689356f7c: Pushed
657a7983a5d3: Pushed
9f54eef41275: Pushed
latest: digest: sha256:528cfe83d93caba437e75039b606a4637dd5c724c6a25d7c7b64ec2e9eb11303 size: 2412
이미지 레이어들이 Harbor 레지스트리로 업로드되는 과정이 표시됩니다. 모든 레이어가 성공적으로 푸시되면, 최종적으로 latest: digest: ... size: ...
와 같은 메시지가 나타나며 푸시가 완료됩니다.
Harbor 웹 UI에서 해당 프로젝트(hk-repo
)로 이동하면, 방금 푸시한 **mariadb
이미지가 리포지토리 목록에 추가된 것을 확인**할 수 있습니다. 이미지를 클릭하여 태그, 취약점 스캔 결과, 빌드 정보 등 상세 내용을 확인할 수도 있습니다.
이 가이드를 통해 Harbor에서 프로젝트를 생성하고, 로컬 Docker 이미지를 프라이빗 레지스트리로 성공적으로 푸시하는 방법을 익히셨기를 바랍니다. Harbor는 단순한 이미지 저장소를 넘어, 이미지의 보안 스캔, 취약점 관리, 접근 제어 등 다양한 기능을 제공하여 컨테이너 워크플로우의 핵심적인 부분을 담당할 수 있습니다. 다음 포스팅에서는 Harbor의 더 깊은 기능들을 살펴보겠습니다!
'깐돌의 클라우드 도구함' 카테고리의 다른 글
[Linux] Ctrl+Alt+Del 재시작 기능 비활성화하기 (1) | 2025.06.05 |
---|---|
[컨테이너] RHOCP4 에서 virtctl 설치 및 사용법 (1) | 2025.06.04 |
[컨테이너] RHEL 8.4에 Harbor 컨테이너 레지스트리 설치하기 (1) | 2025.06.03 |
[Linux] du 명령어로 디렉토리(폴더)별 디스크 사용량 확인하기 (0) | 2025.06.03 |
[가상화] virsh 명령어 사용 가이드 (0) | 2025.05.30 |