Docker私有仓库

私有私有仓库

有时候使用Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。

docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。下面是基于v2.x版本。

仓库也是一个镜像,直接从官方拉取安装:

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

镜像里已经存在了,并且已经开始运行了。

仓库

有时候使用Docker Hub 这样的公共仓库可能不方便,用户可以创建一个本地仓库供私人使用。

docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库。下面是基于v2.x版本。

仓库也是一个镜像,直接从官方拉取安装:

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

镜像里已经存在了,并且已经开始运行了。

Docker私有仓库

这将使用官方的  registry  镜像来启动私有仓库。默认情况下,仓库会被创建在容器的  /var/lib/registry  目录下,可以通过-v参数来讲镜像文件存放在本地的指定路径。

例如

docker run -d  -p 5000:5000  -v /opt/data/registry:/var/lib/registry registry 其实就是之前说的挂载。

 

推送仓库:

先用docker tag标记一个镜像,然后推送他。上面的那个本地仓库地址应该是127.0.0.1:5000。

把ubuntu:latest这个镜像标记为127.0.0.1:5000/ubuntu:latest

格式为 

docker tag IMAGE[:TAG][REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG]

docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest

Docker私有仓库

推送 用docker push

docker push 127.0.0.1:5000/ubuntu:latest

用curl查看

curl 127.0.0.1:5000/v2/_catalog

Docker私有仓库

我是在虚拟机上做的,我在我本机也可以通过虚拟机ip来访问仓库相关

Docker私有仓库

拉取镜像 docker pull

docker pull 127.0.0.1:5000/ubuntu:latest

拉取之前可以先把本地的删除了

docker image rm 127.0.0.1:5000/ubuntu:latest

Docker私有仓库

Ps:如果是想直接推送到类似这样的地址192.168.0.104因为docker默认不允许非https方式推送镜像,会出现这个

docker tag ubuntu:latest 192.168.0.104:5000/ubuntu:latest

docker push 192.168.0.104:5000/ubuntu:latest

Docker私有仓库

 

这种问题的解决办法是 通过配置选项来取消这个限制或者是通过配置HTTPS访问。

我的ubuntu18.04是这么设置的

路径 /etc/docker/daemon.json   (没有的话就创建这个文件)

内容:

{

"registry-mirrors": [

"https://dockerhub.azk8s.cn",

"https://reg-mirror.qiniu.com"

],

"insecure-registries": [

"192.168.0.104:5000"

]

}

因为我配置过数据源,所以上面registry-mirrors里面多出来一些东西。配玩之后我继续推送

docker push 192.168.0.104:5000/ubuntu:latest 发现还是不行,然后我重启了下服务

sudo systemctl daemon-reload

sudo systemctl restart docker

之后就推送上去了。

 

使用  DockerCompose  搭建一个拥有权限认证、TLS 的私有仓库,相关这里略过。现在手上没证书。