在我們容器化技術使用的過程中,從公有鏡像倉庫拉取鏡像是常見的,但往往為了滿足高帶寬、非公開、離線環境等場景需求,使用私有化鏡像倉庫必不可少。本文結合實際案例,介紹如何制作和使用私有鏡像倉庫。
1.私有鏡像倉庫的制作
準備鏡像列表
假設所需的應用鏡像及倉庫鏡像如下。其中應用鏡像保存在imagelist文件里。
| 鏡像名稱 | 鏡像作用 |
| a.com/a1:v1 | 應用鏡像1 |
| a.com/a2:v2 | 應用鏡像2 |
| b.com/b3:v3 | 應用鏡像3 |
| r.com/registry:latest | 倉庫鏡像,默認服務端口為5000 |
啟動本地鏡像倉庫
在鏡像倉庫制作機器中,選定工作目錄為/apps/alogic,以docker啟動鏡像倉庫。
docker run -itd --name nest-registry \
--net=host \
--restart=always \
-v /apps/alogic/nest-registry/data:/var/lib/registry \
r.com/registry:latest
上傳到本地倉庫
通過shell 把應用鏡像上傳至本地
for fullImage in $(cat ./imagelist)
do
local imageWithVersion=${fullImage#*/}
docker pull $fullImage
docker image tag $fullImage 127.0.0.1:5000/${imageWithVersion}
docker push 127.0.0.1:5000/${imageWithVersion}
docker image rm 127.0.0.1:5000/${imageWithVersion}
docker image rm $fullImage
done
打包鏡像倉庫
上傳完成后,把鏡像數據包、鏡像倉庫鏡像打包,以便拷貝到私有化目標主機使用。
tar -zcf registry-data.tar.gz nest-registry
docker export r.com/registry:latest>registry-image.tar
2.私有鏡像倉庫的使用
在私有化目標主機x.x.x.x上,加載并使用鏡像倉庫。
準備鏡像倉庫數據
選定工作目錄為/apps/alogic,利用docker載入鏡像倉庫鏡像,并解壓鏡像數據包。
docker load <registry-image.tar
tar -zxf registry-data.tar.gz nest-registry
啟動本地倉庫
啟動鏡像倉庫,掛載數據目錄,加載鏡像數據包。
docker run -itd --name nest-registry \
--net=host \
--restart=always \
-v /apps/alogic/nest-registry/data:/var/lib/registry \
r.com/registry:latest
修改配置文件
以k8s-crio為例,修改鏡像源域名指向本地。
vi /etc/containers/registries.conf
unqualified-search-registries = ["a.com"]
[[registry]]
prefix = "a.com"
insecure = true
blocked = false
location = "xxxx:5000"
[[registry]]
prefix = "b.com"
insecure = true
blocked = false
location = "xxxx:5000"
拉取使用
目標主機可以按需拉取應用鏡像,完成業務目標。
docker pull a.com/a1:v1
docker pull a.com/a2:v2
docker pull b.com/b3:v3