在我们容器化技术使用的过程中,从公有镜像仓库拉取镜像是常见的,但往往为了满足高带宽、非公开、离线环境等场景需求,使用私有化镜像仓库必不可少。本文结合实际案例,介绍如何制作和使用私有镜像仓库。
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