美文网首页Docker容器上生产
快速搭建并迁移离线docker registry镜像仓库

快速搭建并迁移离线docker registry镜像仓库

作者: 赵文宇 | 来源:发表于2018-09-28 00:13 被阅读265次

    Docker Registry是Dockers镜像的存储和管理中心,在一个离线或没有外网网络的环境下使用大量docker镜像,需要提供一个镜像仓库时需要怎么操作比较合适呢?

    Registry可以通过push的方式上传镜像到仓库中,默认将上传的镜像数据保存在/var/lib/registry目录。那么在离线时我们可以将regsitry本身的镜像save成tar包,将/var/lib/registry数据目录也打包成tar包,然后在目标机器上通过volume的形式挂载运行即可提供服务。

    具体的实现步骤如下:

    前置说明:

    拟定有两台已经安装了Docker的机器A和B,A机器所在网络能够访问公网,B机器所在网络不能访问公网。
    这样为了模拟了部分企业网络隔离的场景。

    A机器准备数据

    下载docker registry镜像

    在有A机器上下载registry的docker镜像

    docker pull docker.io/registry
    

    可以直接在docker hub的官网下载最新版本,也可以使用国内的提供的免费的镜像仓库。例如

    docker pull hub.c.163.com/library/registry:latest
    

    创建docker镜像存储目录

    在A机器上创建一个保存docker镜像overlay的本地目录

    mkdir -p /data/registry-data 
    

    添加http访问权限

    修改文件/etc/docker/daemon.json,之后就可以使用http的方式registry,默认是使用https的方式访问。

    { 
        "insecure-registries":["127.0.0.1:5000"],
        "log-driver": "json-file",
        "log-opt": {
            "max-size": "100m",
            "max-file": "5"
        }
     }
    

    这里主要添加insecure-registries配置即可,另外的两条是对docker log的限制。
    有多条时配置时,可以使用逗号,分隔多个。

    重启docker服务

    修改完/etc/docker/daemon.json后,需要重启docker服务才能使配置生效。

    systemctl restart docker
    

    其他的系统分别使用不同的方法重启。
    例如:
    centos6/redhat6

    service docker restart
    

    或者部分环境可以使用如下方法重启服务

    /etc/init.d/docker restart
    

    运行registry服务

    在A机器上运行registry服务并将/data/registry-data目录挂载到容器内/var/lib/registry目录中

    docker run 
    -d --name=registry  \
    -v /registry-data:/var/lib/registry  \
    -p 5000:5000 docker.io/registry
    

    修改本地镜像tag

    docker镜像上传时需要指定仓库名称和镜像名称

    docker tag docker.io/centos  127.0.0.1:5000/centos
    

    这里的例子将镜像的仓库名称写成127.0.0.1:5000,也可以根据环境信息配置,建议使用域名的方式管理镜像。

    上传镜像到本地的registry仓库中

    在A机器上将需要的镜像都push到该registry中,

    docker push 127.0.0.1:5000/centos
    

    这里只提供了一个centos的镜像下载和上传的方法,类推可以将需要的镜像都上传到本地registry中。

    打包registry镜像

    在A机器上打包registry镜像

    docker save -o registry.tar docker.io/registry
    

    由于B 机器上可能没有registry仓库本身的镜像,这里可以将registry的镜像save成tar包。

    打包/data/registry-data目录

    在A机器上打包/data/registry-data目录

    tar czvf registry-images-data.tar.gz /data/registry-data
    

    移动数据

    将registry.tar 和 registry-images-data.tar.gz 两个文件复制到B机器上。
    复制的方法可以有多种 ,比如scp/ftp/U盘/等方式;
    建议在复制前先使用md5sum/sha256计算一个校验值,在目标机器再次校验一次,确保文件在传输过程中没有异常。

    B 机器建立离线registry

    修改B机器上docker配置文件添加http访问权限

    修改文件/etc/docker/daemon.json,之后就可以使用http的方式registry,默认是使用https的方式访问。

    { 
        "insecure-registries":["127.0.0.1:5000"],
        "log-driver": "json-file",
        "log-opt": {
            "max-size": "100m",
            "max-file": "5"
        }
     }
    

    这里主要添加insecure-registries配置即可,另外的两条是对docker log的限制。
    有多条时配置时,可以使用逗号,分隔多个。

    重启docker服务

    修改完/etc/docker/daemon.json后,需要重启docker服务才能使配置生效。

    systemctl restart docker
    

    其他的系统分别使用不同的方法重启。
    例如:
    centos6/redhat6

    service docker restart
    

    或者部分环境可以使用如下方法重启服务

    /etc/init.d/docker restart
    

    导入registry镜像

    在B机器上导入registry的镜像

    docker load -i registry.tar
    

    镜像registry的镜像导入到本地的docker中

    解压镜像数据

    在B机器上解压镜像数据

    tar xf registry-images-data.tar.gz -C /data/registry-data
    

    这里的路径建议配置一致,如果路径不一致可能导致启动的registry无法找到正确的数据目录。

    运行registry容器

    在B机器上运行registry

    docker run \
    -d --name=registry \
    -v /data/registry-data:/var/lib/registry \
    -p 5000:5000 docker.io/registry
    

    验证使用

    在B机器所在 网络中,根据要求修改tag,通过docker pull的方式从该registry中下载镜像使用。例如:

    docker pull 127.0.0.1:5000/centos
    

    相关文章

      网友评论

        本文标题:快速搭建并迁移离线docker registry镜像仓库

        本文链接:https://www.haomeiwen.com/subject/aqxuoftx.html