Docker Registry是Dockers镜像的存储和管理中心,在一个离线或没有外网网络的环境下使用大量docker镜像,需要提供一个镜像仓库时需要怎么操作比较合适呢?
Registry可以通过push的方式上传镜像到仓库中,默认将上传的镜像数据保存在/var/lib/registry
目录。那么在离线时我们可以:
注意;如果被迁入的服务器上已经有registry镜像,那么就只需要打包保存镜像的数据目录即可。
bash
mkdir /var/lib/registry_data
/etc/docker/daemon.json
,默认情况下需要使用https方式访问,进行如下修改:
json
{
"insecure-registries":["127.0.0.1:5000"]
}
修改完成之后,需要重启docker进程。bash
docker run
-d --name=registry \
-v /var/lib/registry_data:/var/lib/registry \
-p 5000:5000 docker.io/registry:2.7
bash
docker tag <name>:<tag> 127.0.0.1:5000/<name>:<tag>
docker push 127.0.0.1:5000/<name>:<tag>
bash
docker save -o registry.tar docker.io/registry
bash
tar -zcvf registry-data.tar.gz /var/lib/registry_data
bash
md5sum/sha256 registry.tar
md5sum/sha256 registry-data.tar.gz
按照第二步修改被迁入主机的docker配置
导入registry镜像
docker load -i registry.tar
解压镜像数据压缩包
tar -zxvf registry-data.tar.gz -C /var/lib/registry_data
运行registry容器
docker run \
-d --name=registry \
-v /var/lib/registry-data:/var/lib/registry \
-p 5000:5000 docker.io/registry:2.7
验证使用,根据B机器所在网络,修改tag,然后通过docker pull的方式拉去镜像。
通常情况下,为了方便管理,registry都会挂载一个名字为registry的volume。registry是一个无状态的服务,迁移名为registry的volume即可。
注意,保证迁出节点上registry的运行是绑定在名为registry的volume上的
bash
tar -zcvf registry-data.tar.gz /var/lib/docker/volumes/registry/_data/docker/
bash
docker volume create registry
bash
tar -zxvf registry-data.tar.gz
启动registry容器
docker run -d \
--name registry \
--restart=always \
-p 5000:5000 \
-v registry:/var/lib/registry \
registry:2.7
验证新的registry
curl -i http://127.0.0.1:5000/v2/_catalog
# 通过unix套接字来通信
curl --unix-socket /var/run/docker.sock http://127.0.0.1:5000/v2/_catalog
curl --no-buffer -XGET --unix-socket /docker.sock http://localhost/events