centos7上搭建docker私有仓库

私有仓库主机(centos7):10.60.34.46 
客户机(centos7):client

私有仓库主机上:

  1. 下载registry镜像

    docker pull registry
  2. 运行registry容器,为了在容器关闭时不删除仓库目录,需要把仓库目录挂载到宿主机目录

    docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

客户机上:

  1. 获取一个小的镜像busybox用于测试

    docker pull busybox
  2. 修改busybox的标签,用于上传到私有仓库

    docker tag busybox 10.60.34.46:5000/busybox
  3. 上传

    docker push 10.60.34.46:5000/busybox

    这里会出现错误:

    Error response from daemon: unable to ping registry endpoint https://10.60.34.46:5000/v0/
    v2 ping attempt failed with error: Get https://10.60.34.46:5000/v2/: EOF
     v1 ping attempt failed with error: Get https://10.60.34.46:5000/v1/_ping: EOF

    原因是与私有仓库的默认交互方式是https,而私有仓库主机只提供http服务。可以在客户端docker的启动配置文件中加入参数:-–insecure-registry=10.60.34.46:5000来规避这个问题。

    vi /usr/lib/systemd/system/docker.service
    [Service]
    Type=notify
    ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry=10.60.34.46:5000

    重启docker:

    systemctl daemon-reload
    service docker restart

    再次上传:

    [root@bogon ~]# docker push 10.60.34.46:5000/busybox
    The push refers to a repository [10.60.34.46:5000/busybox] (len: 1)
    Sending image list
    Pushing repository 10.60.34.46:5000/busybox (1 tags)
    Image cfa753dfea5e already pushed, skipping
    Image d7057cb02084 already pushed, skipping
    Pushing tag for rev [d7057cb02084] on {http://10.60.34.46:5000/v1/repositories/busybox/tags/latest}

    查看私有仓库:

    [root@bogon ~]# curl http://10.60.34.46:5000/v1/search
    {"num_results": 2, "query": "", "results": [{"description": "", "name": "library/centos"}, {"description": "", "name": "library/busybox"}]}

    查询镜像:

    [root@bogon ~]# curl http://10.60.34.46:5000/v1/search?q=busybox
    {"num_results": 1, "query": "busybox", "results": [{"description": "", "name": "library/busybox"}]}

    获取镜像:

    docker pull 10.60.34.46:5000/busybox

        上传镜像报错

        [root@registry xinetd.d]# docker push 10.100.50.120:5000/busybox

        The push refers to a repository [10.100.50.122:5000/busybox]

        Get https://10.100.50.120:5000/v1/_ping: http: server gave HTTP response to HTTPS client

        [root@registry xinetd.d]#

        解决方案:

        修改/etc/sysconfig/docker文件,并重新启动docker服务。

        ADD_REGISTRY='--add-registry 10.100.50.120:5000'

        INSECURE_REGISTRY='--insecure-registry 10.100.50.120:5000'

       另外解决方案:

       在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:

{
    "insecure-registries": [
        "hub.docker.jiankunking.io:5000"
    ]
}
//多个私服写法,逗号分隔即可
{
    "insecure-registries": [
        "test.docker.jiankunking.io:5000", 
        "hub.docker.jiankunking.io:5000"
    ]
}

客户端添加私有仓库地址

# 添加这一行
ADD_REGISTRY='--add-registry 192.168.0.179:5000'

加上后,search镜像,私有仓库和docker hub上都会显示; 
不加搜索私有仓库,需要命令中指定私有仓库ip


使用仓库中的镜像

查询私有仓库中的所有镜像,使用docker search命令:

curl -u myuser https://registry_ip:5000/v1/search
curl registry_ip:5000/v1/search
docker search registry_ip:5000/     #centos 7
docker search registry_ip:5000/library #centos 6

查询仓库中指定账户下的镜像,则使用如下命令:

docker search registry_ip:5000/account/

遇到的问题:

通过 curl 47.106.91.104:5000/v1/search 命令查询本地仓库镜像一直报404错误,通过docker search register发现register版本是2.0的。v2的查询命令是: curl 47.106.91.104:5000/v2/_catalog



镜像迁移:解决不同主机环境下对镜像的使用     

1. 可以通过`docker commit`命令提交image到本地,然后push到registry服务器上(私有的或者共有的docker hub),然后从registry服务器上拉取到本地就可以了。
2. 通过`docker export`或者`docker save`命令将容器或image保存下来,然后通过`docker import或者docker load`命令导入就可以了。

另外可以通过写dockerfile来移植,`docker build`就好。


转载原博地址:https://blog.csdn.net/jiankunking/article/details/71190814 https://blog.csdn.net/apexlj/article/details/49076677

https://blog.csdn.net/fgf00/article/details/52040492

猜你喜欢

转载自blog.csdn.net/qq_40693828/article/details/79858953