概要
目標
因為實驗需要一個內(nèi)部私有倉庫狮崩,并且有圖形界面。但資源有限丘薛,不適宜部署harbor嘉竟。所以需要部署一個輕量級的harbor替代方案,要求有基本認證榔袋,圖形化界面周拐。Docker Registry
支持的htpasswd就能滿足基本認證需求, 而后凰兑,網(wǎng)上找了一個Docker Registry User Interface
就能基本實現(xiàn)圖形界面的需求妥粟。
環(huán)境要求
- docker 已經(jīng)部署
- 安裝了docker-compose
- 網(wǎng)絡(luò)可以訪問dockerhub或者鏡像
部署流程
創(chuàng)建目錄
cd <工作目錄>
mkdir -pv registry
cd <工作目錄>/registry
mkdir -pv data # 存放鏡像文件的目錄
mkdir -pv auth # 存放認證文件的目錄
設(shè)置關(guān)鍵變量
cd <工作目錄>/registry
vim .env_file
# htpasswd認證用戶名和密碼
HTPSD_USERNAME: register # 用戶名
HTPSD_PASSWD: mypasswd # 密碼
# docker registry 的配置
REGISTRY_AUTH: htpasswd # 認證方式是htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry-Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/registry.passwd
REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY: /data # 存放鏡像的目錄
REGISTRY_STORAGE_DELETE_ENABLED: true # 允許用戶刪除鏡像
# Docker Registry User Interface圖形化的參數(shù)
SINGLE_REGISTRY: true
REGISTRY_TITLE: 我的鏡像倉庫
DELETE_IMAGES: true # 允許刪除鏡像
SHOW_CONTENT_DIGEST: true # 在 Docker 標簽列表中顯示/隱藏內(nèi)容摘要
NGINX_PROXY_PASS_URL: http://registry:5000 # 倉庫地址
SHOW_CATALOG_NB_TAGS: true # 在目錄頁面顯示每個鏡像的標簽數(shù)量,并隱藏 0 標簽的鏡像吏够。
CATALOG_MIN_BRANCHES: 1 # 設(shè)置默認展開的最低倉庫/命名空間數(shù)量
CATALOG_MAX_BRANCHES: 1 # 設(shè)置默認展開的最大倉庫/命名空間數(shù)量
TAGLIST_PAGE_SIZE: 100 # 設(shè)置單頁顯示的標簽數(shù)量勾给。
REGISTRY_SECURED: false # 默認情況下,UI 會在每個請求中檢查倉庫是否安全(控制臺中會看到 401 響應(yīng))锅知。如果倉庫使用基本認證播急,請設(shè)置為 true,可減少倉庫請求的數(shù)量售睹。(默認值:false)桩警。
CATALOG_ELEMENTS_LIMIT: 1000 # 限制目錄頁面中的元素數(shù)量
創(chuàng)建docker-compose的配置文件
cd <工作目錄>/registry
vim docker-compose.yaml
version: '3.8'
services:
## 容器啟動階段使用 htpasswd 創(chuàng)建認證文件。
htpasswd_init:
image: httpd:latest # Use httpd, which includes htpasswd utility
command:
- bash
- -c
- if [ ! -f /auth/registry.passwd ];then htpasswd -bBc /auth/registry.passwd "$$HTPSD_USERNAME" "$$HTPSD_PASSWD" ;fi
volumes:
- ./auth:/auth # Mounts a shared directory to store the htpasswd file
restart: "no" # Ensures it only runs once at startup
env_file:
- ./.env_file
# docker-registry昌妹, docker官方倉庫
registry:
image: registry:2
restart: always
env_file:
- ./.env_file
volumes:
- ./data:/data
- ./auth:/auth
networks:
- registrynet
depends_on:
- htpasswd_init # 等待htpasswd_init創(chuàng)建完成密碼文件再運行捶枢。
# 圖形化界面的容器
registry-ui:
image: joxit/docker-registry-ui:main
restart: always
ports:
- "9180:80" # 對外的端口握截,可以修改為你實際需要的端口。
env_file:
- ./.env_file
container_name: registry-ui
networks:
- registrynet
networks:
registrynet:
driver: bridge
部署
cd <工作目錄>/registry
docker-compose up -d
docker-compose ps
docker客戶端使用
登錄
docker login <ip>:9180 -u register -p mypasswd
推送測試
docker pull alpine
docker tag alpine:3.20.2 <ip>:9180/baseimg/alpine:3.20.2 # 修改成 “倉庫的地址:/組名/鏡像名:版本號"
docker push <ip>:9180/baseimg/alpine:3.20.2
拉取測試
# 刪除測試鏡像
docker rmi <ip>:9180/baseimg/alpine:3.20.2
docker images |grep alpine:3.20.2
# 重新拉取鏡像
docker pull <ip>:9180/baseimg/alpine:3.20.2
docker images |grep alpine:3.20.2
圖形界面
訪問:
http://127.0.0.1:9180/