본문 바로가기

생활코딩

라즈베리파이 - Docker Registry 서버 설치

앞선 Git 서버 설치하기 글과 이어지는 글입니다.

 

Git 서버는 Gitea를 통해 잘 설치했고, 이번에는 라즈베리파이 3B에 Docker Registry 서버 설치입니다. 순서 상으로는 Gitea를 나중에 설치 했고, Docker Registry 서버를 먼저 설치했지만, 내용 정리는 이제서야 하게 됐습니다.

 

Harbor

Registry 서버로 뭘 설치해야할까 검색을 좀 해 보니 Open Source로 Harbor라는게 보여서 처음에는 이 걸 설치해 보려고 진행을 했습니다. 가이드에 따라서 한 참을 진행하고 있었는데, '앗! 이런' Harbor가 arm64 아키텍처를 지원하고 있지 않는 겁니다. ㅠㅠ

https://github.com/goharbor/harbor-arm

 

GitHub - goharbor/harbor-arm: Build Harbor for arm architecture.

Build Harbor for arm architecture. Contribute to goharbor/harbor-arm development by creating an account on GitHub.

github.com

이런 별도의 프로젝트로 ARM쪽을 진행 중인가 본데 완결이 안 된 건지 시키는대로 빌드를 해 봤지만 잘 안 되더군요. 더 해 볼 여지는 있었지만 이렇게 목숨 걸고 할 필요는 없어서 Harbor는 여기에서 포기했습니다.

CNCF Registry

조금 더 검색을 해 보니 CNCF(Cloud Native Computing Foundation)에서 Registry 서버를 그것도 Docker image로 배포하고 있다는 것을 알게됐습니다. 웹 UI가 없기는 하지만 저한테는 단순히 Docker Image push 잘 받아주고 pull 만 잘 되면 됐기 때문에 이걸로 설치하기로 결정했습니다.

설치 과정

1. 필요한 디렉토리 생성

mkdir docker-registry
cd docker-registry
mkdir registry-data
mkdir auth

 

2. 계정 및 암호 설정

cd auth
htpasswd -Bc registry.password 계정이름

 

3. docker compose 파일 작성

cd ..
vi docker-compose.yml

 

docker-compose.yml 내용

→ 인증이 필요한 경우

version: '3'

services:
  registry:
    image: registry:latest
    ports:
    - "5000:5000"
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.password
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /registry-data
    volumes:
      - ./auth:/auth
      - ./registry-data:/registry-data

 

 인증이 필요 없는 경우 (인증이 필요 없는 경우에는 auth 디렉토리 만드는 것과 2번 과정을 생략해도 됩니다)

version: '3'

services:
  registry:
    image: registry:latest
    ports:
    - "5000:5000"
    environment:
      REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /registry-data
    volumes:
      - ./registry-data:/registry-data

 

4. 실행

docker compose up -d

 

5. 간단한 확인

브라우저에서 http://ip주소:5000/v2/_catalog 접속을 하여 응답을 하면 정상 동작하는 것입니다.

 

사용

해당 서버 주소 5000 번으로 일반적인 Registry 서버를 쓰듯이 사용하면 됩니다.

→ 예시

docker tag example:latest 서버아이피주소:5000/dream:latest
docker push 서버아이피주소:5000/dream:latest

 

API

웹 UI가 없어서 아쉽기는 하지만 RESTful API는 제공하고 있어서 필요한 경우 API 호출을 통해 이미지 삭제 등과 같은 다양한 작업을 할 수 있습니다. API 명세는 https://distribution.github.io/distribution/spec/api/ 에 자세히 나와 있습니다.

 

마무리

어차피 저 혼자 써서 그렇겠지만, 라즈베리파 3B 상에서도 무리 없이 잘 돌아갑니다. 이제 라즈베리파이 5로 배포할 때는 로컬에서 도커이미지를 만들고 3쪽으로 push 하고, 5에서 pull 해서 배포하고 있습니다. 요정도만 해 놔도 행복한(?) 배포 생활이 되더군요.

 

참고