拉官方的镜像比较慢,save或export的文件需要传来传去,搭建一个私人仓库就啥问题都没有了。


前提:安装好了docker-ce并能够正常使用

注意:本文中的client是我的hostname,请自行调整


  • 搭建docker本地镜像仓库

先获取并运行docker官方的repository镜像

docker run -d -p 5000:5000 --restart always --name registry registry:2


--restart选项是在docker-ce启动时会自动启动,always是级别,stop掉了会不自动重启。


修改daemon.json文件(如果没有就创建)

 vim /etc/docker/daemon.json

{

   "insecure-registries": [

         "repository:5000"

     ]

 }


repository是主机名,可以使用ip,5000是运行registry时指定的端口,可以指定多个本地仓库,用,间隔


重启docker

systemctl restart docker


查看本地镜像

image.png


给本地镜像打标签

docker tag centos repository:5000/centos


repository:5000是本地仓库的地址

将本地镜像上传到本地镜像仓库

docker push repository:5000/centos


查看本地镜像仓库中镜像

curl -4 http://localhost:5000/v2/_catalog

image.png

获取镜像

docker pull repository:5000/centos




  • SSL所有仓库搭建

  • 准备ssl证书,放哪都可以,只要你记得住

mkdir -p /data/registry

cd /data/registry

openssl req -newkey rsa:4096 -nodes -sha256 -keyout ${HOSTNAME}.key -x509 -days 365 -out ${HOSTNAME}.crt

一路回车即可,会生成两个文件

image.png


  • 准备docker-compose.yml文件(注意修改下面的${HOSTNAME},不要用变量)

 version: '3'
services:
   registry:
        image: registry:2.6.1
hostname: registry
deploy:
restart_policy:
    condition: on-failure
ports:
    - 443:5000/tcp
        networks:
            registry:
                aliases:
                    - registry
        volumes:
            - /var/lib/registry:/var/lib/registry:rw
            - /data/registry:/certs
        environment:
            - REGISTRY_HTTP_TLS_KEY=/certs/${HOSTNAME}.key
            - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/${HOSTNAME}.crt
networks:
    registry:
        external: true


  • 启动registry容器

    docker-compose -p my up -d


这里可能会报错,要你手动创建网络,如果有了就不用管

image.png

docker network create registry


注:如果docker-compose之后镜像创建了,但是起不来,请用docker logs <images>查看日志,解决错误

连接测试

[root@client registry]# curl -k https://127.0.0.1/v2/_catalog

{"repositories":[]}


配置客户端:

mkdir -p /etc/docker/certs.d/client

cp /data/registry/client.crt /etc/docker/certs.d/client/

systemctl restart docker

因为没有设置自动启动,需要手动启动

docker start my_registry_1

查看状态image.png

用其他机器连接测试

image.png


上传镜像

docker tag centos:latest client:443/centos:latest

docker push client:443/centos:latest


报错

denied: requested access to the resource is denied

上传被拒绝

排查:

一、/etc/docker/daemon.json文件中是否指定私有仓库,指定的hostname和端口是否正确

    "insecure-registries": [

         "client:443"

     ]

二、私有仓库是否启动,防火墙是否开放其端口

三、daemon.json文件修改后是否生效(重启docker即可)

systemctl restart docker

四、上传的镜像名称是否正确(格式   hostname:port/image:version)


certificate is not valid for any names, but wanted to match repository

证书无效

解决方法:重启docker,重启repository容器


[参考:[官方文档](https://docs.docker.com/samples/library/registry/)

布小沫Docker入门级简易手册:https://github.com/buxiaomo/MarkdownBooks