使用 Nexus Repository 建立 Docker Registry

之前筆記 使用 Docker 建立 Nexus3 的 Image Registry 紀錄到如何使用 Sonatype Nexus Repository 來建立 Docker Image Registry,最近遇到幾次需要使用 Docker Registry 的需求,但之前筆記 使用 Docker 建立 Nexus3 的 Image Registry 卻因為不同因素派不上用場,所以今天就來針對最近遇到的問題來補充如何使用 Sonatype Nexus Repository 來建立 Docker Registry。

基本環境設定

  • macOS Sonoma 14.6.1 (Apple M2 Pro)
  • OrbStack 1.7.2 (17389)
  • container images

    • sonatype/nexus3:3.72.0
  • 使用 docker-compose 來建立 Nexus Repository

    • 8081 是 ui port
    • 8082 是 connector for docker port

設定方式與使用方式

  1. 首次登入並完成設定

    • 首次登入 Nexus Repository 需要從 container 中取得 password,並修改密碼

      1password

      docker exec -it nexus cat /nexus-data/admin.password 
      
    • 修改密碼並完成設定

      2setup1

      3setup2

      4setup3

      5setup4

  2. 建立 Docker Registry

    • Server administration and configuration –> Repositories –> Create repository

      6createrepo

    • Select Recipe –> docker (hosted)

      7dockerhost

    • Create Repository: docker (hosted)

      • Name 是必填
      • HTTP connector port 是為了方便 docker client 使用,也會影響之後 image 的完整名稱 (設定需與 docker compose 中除了 8081 之外的 port 一致)

      8dockerhosted

  3. 允許匿名 pull 時需設定 Docker Bearer Token Realm:Security –> Realms –> 加入 Docker Bearer Token Realm

    9dockereralms

    • 未設定錯誤:Error response from daemon: unauthorized

      10unauthorized

  4. 實際使用

    port 使用 connector port,不是 8081

    • 登入:docker login localhost:8082

      11login

    • image 名稱模版: {host}:{port}/{image name}:{tag}

    • image 名稱範例: localhost:8082/redis:latest

      13dockerpush

心得

Sonatype Nexus Repository 從 3.66.0 開始加入了 threshold 的機制,用量超過 20,000 requests/每天 或是 100,000 components 會收到警告,依我自己的經驗 nexus 會暫停提供服務,重啟後可以緩解,但畢竟 threshold 已經頂到了,還是會持續出現問題,所以建議在使用前要先評估用量,避免出現問題。

參考資訊

  1. 使用 Docker 建立 Nexus3 的 Image Registry
  2. Docker Authentication