프로젝트 소개

Unregistry는 Docker 데몬의 스토리지(containerd 이미지 스토어)에서 직접 이미지를 저장하고 제공하는 경량 컨테이너 이미지 레지스트리입니다. 머신 간 이미지 이동 시 외부 레지스트리의 필요성을 제거하도록 설계되었습니다. 이 프로젝트는 Docker CLI 플러그인 명령인 `docker pussh`(추가 's'는 SSH를 의미)를 제공하며, SSH를 통해 원격 Docker 서버로 이미지를 직접 푸시합니다. 원격 측에 없는 레이어만 전송되며, README는 이를 빠르고 효율적인 작업으로 설명합니다. README에 따른 작동 방식: 명령은 원격 서버에 SSH 터널을 설정하고, 임시 unregistry 컨테이너를 시작하며, 터널을 통해 임의의 localhost 포트를 unregistry 포트로 전달하고, 전달된 포트를 통해 `docker push`를 unregistry로 실행(원격에 이미 없는 레이어만 전송)한 다음, unregistry 컨테이너를 중지하고 터널을 닫습니다. 전송된 이미지는 원격 Docker 데몬에서 사용할 수 있게 됩니다. README는 이 접근 방식을 Docker 이미지용 rsync에 비유합니다. 동기: README는 일반적인 대안과 그 단점을 나열합니다 — 공개 레지스트리(코드 노출 또는 유료 프라이빗 저장소), 자체 호스팅 레지스트리(유지 관리 및 보안을 위한 추가 서비스), `docker save | ssh ... docker load`(대부분의 레이어가 이미 원격에 존재해도 전체 이미지 전송), 원격 재빌드(시간 및 리소스 낭비). Unregistry는 원래 여러 Docker 호스트에 컨테이너를 배포하는 도구인 Uncloud를 위해 만들어졌습니다. 요구 사항: 로컬에는 플러그인 지원 Docker CLI(Docker 19.03 이상)와 OpenSSH 클라이언트가 필요합니다. 원격 서버에는 Docker가 설치 및 실행 중이어야 하며, SSH 사용자는 docker 명령을 실행할 수 있어야 하고(root 또는 docker 그룹의 사용자), sudo가 필요한 경우 비밀번호 없는 `sudo docker`가 필요합니다. 서버는 첫 사용 시 unregistry 이미지를 가져오기 위해 ghcr.io에 대한 인터넷 액세스가 필요하며, 에어갭 또는 제한된 환경에서는 이미지를 수동으로 사전 로드해야 합니다. unregistry 컨테이너는 /run/containerd/containerd.sock의 containerd 소켓에 액세스해야 하며 root로 실행됩니다. 문서화된 설치 옵션: Homebrew(`brew install psviderski/tap/docker-pussh`, 그리고 ~/.docker/cli-plugins에 심볼릭 링크 추가), 플러그인 디렉토리에 docker-pussh 스크립트 직접 다운로드, 별도 저장소에서 유지 관리되는 비공식 Debian 패키지. Windows는 현재 지원되지 않지만, Linux 지침과 함께 WSL 2가 제안됩니다. 설치는 `docker pussh --help`로 확인할 수 있습니다. 주목할 만한 구성 주제는 containerd 이미지 스토어입니다. Unregistry는 containerd의 이미지 스토어에 이미지를 저장하지만, 기본적으로 Docker는 자체 별도 스토리지 레이어를 유지합니다. Docker에서 containerd 이미지 스토어를 활성화하면 푸시된 이미지가 중복 없이 즉시 Docker에서 사용 가능하며 pussh 작업이 더 빨라집니다. 활성화하지 않으면 pussh는 원격 호스트에서 추가 `docker pull`을 실행하고, 이미지는 두 번 저장되며, 관리되지 않는 containerd 이미지가 축적될 수 있습니다. README는 수동 정리를 위해 `ctr -n moby images ls` 및 `ctr -n moby images rm`을 보여줍니다. containerd 이미지 스토어 활성화는 기존 스토리지 드라이버로 생성된 이미지와 컨테이너의 일시적 손실을 초래하는 것으로 문서화되어 있습니다. 사용 예시에는 원격 호스트로 푸시, `-i`를 사용한 SSH 키 인증, 사용자 지정 SSH 포트, `-F`를 사용한 사용자 지정 SSH 구성 파일, 멀티 플랫폼 이미지용 플랫폼 선택(로컬 containerd 이미지 스토어 필요), UNREGISTRY_IMAGE 환경 변수를 통한 unregistry 이미지 버전 재정의가 포함됩니다. 문서화된 사용 사례는 프로덕션 서버 배포, CI/CD 파이프라인, 홈랩 또는 에어갭 환경입니다. Unregistry는 containerd 소켓을 마운트하여 포트 5000의 로컬 레지스트리로 독립 실행형으로 실행할 수도 있습니다. README는 타사 프로젝트를 연결합니다: docker-pussh로 이미지를 푸시하는 GitHub Action, 플러그인을 설치하는 GitHub Action, 자체 호스팅 레지스트리에서 이미지를 정리하는 Python 도구. containerd 이미지 스토어를 레지스트리 백엔드로 사용하는 데 영감을 준 Spegel과 unregistry가 기반으로 하는 레지스트리 구현인 Docker Distribution을 크레딧으로 언급합니다.