스킬: 로컬 OCI 레지스트리
목적
개발용 로컬 OCI 레지스트리를 시작하고 관리합니다. 외부 레지스트리 접근 없이 키트를 로컬에서 빌드하고 게시할 수 있게 해줍니다.
사용 시기
- 변형(variant)에서 사용할 키트의 변경 사항을 개발할 때
- 프로덕션 레지스트리에 게시하기 전에 키트 변경 사항을 테스트할 때
- 오프라인 또는 격리된 환경에서 작업할 때
사전 요구사항
- Docker가 설치되어 실행 중이어야 함
- grove 디렉토리 내에서 작업 중이어야 함
절차
레지스트리 시작
brdev registry start
이 명령은 다음을 수행합니다:
localhost:5000에 로컬 Docker 레지스트리 시작- 지속성 구성(레지스트리 데이터는 재시작 후에도 유지됨)
- 레지스트리가 정상 상태가 될 때까지 대기
- 빌드에서 사용할 레지스트리 URL 출력
레지스트리 실행 확인
brdev registry status
실행 중이면 종료 코드 0을 반환하고, 그렇지 않으면 0이 아닌 값을 반환합니다.
레지스트리 URL 가져오기
brdev registry url
현재 grove에 대해 localhost:{port}를 출력합니다. 포트를 하드코딩하는 대신 스크립트에서 이 URL을 사용하세요.
레지스트리 로그 보기
brdev registry logs
로그를 실시간으로 보려면:
brdev registry logs --follow
레지스트리 중지
brdev registry stop
참고: 이 명령은 레지스트리 데이터 볼륨을 보존합니다.
레지스트리 데이터 정리
brdev registry clean
컨테이너와 데이터 볼륨을 모두 제거합니다.
설정
brdev는 환경 변수를 사용하여 설정합니다. forest 루트에 .env 파일을 만들거나 환경 변수를 설정하세요:
# 사용자 지정 이미지 (기본값: registry:2)
BRDEV_REGISTRY_IMAGE=registry:2.8
참고: 컨테이너 이름과 볼륨 이름은 grove 이름에서 자동으로 생성되어 brdev-registry-{grove} 및 brdev-registry-data-{grove}가 됩니다. 포트는 grove 이름의 해시에서 자동으로 생성됩니다(범위 5001-5999).
검증
레지스트리 시작 후:
brdev registry list
다음을 반환해야 합니다: {"repositories":[]}
일반적인 문제
Docker가 설치되지 않음:
Error: Docker is not installed or not in PATH. Install Docker and ensure it's in your PATH
해결 방법: Docker를 설치하고 PATH에 추가하세요.
Docker 데몬이 실행 중이 아님:
Error: Docker daemon is not running. Start Docker with: sudo systemctl start docker
해결 방법: Docker 데몬을 시작하세요.
포트가 이미 사용 중:
Error: Failed to start container. The port may already be in use
해결 방법:
- 기존 레지스트리 확인:
docker ps | grep registry - 충돌하는 컨테이너 중지:
docker stop <container-id> - 또는
FORESTER_REGISTRY_PORT를 통해 사용자 지정 포트 사용
권한 거부:
- 사용자가 docker 그룹에 속해 있는지 확인:
groups | grep docker - docker 그룹에 사용자 추가:
sudo usermod -aG docker $USER - 그룹 추가 후 셸을 다시 시작해야 할 수 있음
관련 스킬
build-kit-locally- 로컬 레지스트리를 사용하여 빌드된 키트를 게시build-variant-from-local-kits- 변형 빌드가 로컬 레지스트리를 사용하도록 구성
참고
로컬 레지스트리 사용을 위한 설정 명령:
키트 게시:
brdev twoliter use-local-publish- 로컬 레지스트리에 게시하기 위한Infra.toml생성brdev twoliter use-upstream-publish-Infra.toml제거
키트 가져오기:
brdev twoliter use-local-deps- 로컬 레지스트리에서 가져오기 위한Twoliter.override생성brdev twoliter use-upstream-deps-Twoliter.override제거
둘 다 (편의):
brdev twoliter use-local- 두 파일 모두 생성brdev twoliter use-upstream- 두 파일 모두 제거
가져올 때 로컬 레지스트리에서 원하는 특정 키트에 대해 Twoliter.toml에 vendor = "local"도 설정하세요.