1)用docker容器运行registry私有仓库服务。
注:registry是官方打包好的服务,端口为5000,就像其他虚拟出来的web服务一样
注意,这里我们使用的是registry:2版本,还有一个registry镜像,这两个没有什么大的区别。registry: 是用Python语言写的,registry:2使用Go 语言写的,理论上来说,registry:2这个版本运行更快些。
命令: docker pull registry:2
2)运行私有仓库服务
命令:
docker run -itd --name registry --restart=always -p 5000:5000 -v /registry:/var/lib/registry registry:2 -v: 挂载目录。 宿主机的目录(如果没有此目录会自动创建):容器内的目录。(数据卷:实现容器与宿主机之间的共享,通过一个目录"卷") --restart=always:随着docker服务的启动而启动此容器
3)镜像重命名(要上传的镜像名需要注明私仓的ip)
因为我们使用的私有镜像,在上传或下载的时候,都需要我们将镜像的名称直接重命名,要注明它私有仓库的IP地址:暴露端口。切记是必须,否则将识别不到仓库而上传或下载失败。
格式为:docker tag IMAGE[:TAG] [REGISTRY_HOST[:REGISTRY_PORT]/]REPOSITORY[:TAG] 命令: docker tag nginx:latest 192.168.8.10:5000/nginx
4)编辑docker配置文件(因为默认是拉取docker官方的镜像,需要重新指定)
#初次上传命令: docker push 192.168.8.10:5000/nginx #上传私有仓库会报错 #以下是报错: #The push refers to repository [192.168.8.10:5000/nginx] #Get https://192.168.8.10:5000/v2/: http: server gave HTTP response to HTTPS client
//上传镜像失败原因如下:
因为docker默认是从dockehub上下载镜像的,需要在本地指定一下私有仓库的IP加端口,这是因为 Docker默认不允许非HTTPS 方式推送镜像。 如果没做这一步,会报HTTPS的错。
#编辑docker的配置文件,指定私有仓库地址
vim /usr/lib/systemd/system/docker.service 修改: [Service] ExecStart=/usr/bin/dockerd --insecure-registry 192.168.8.10:5000 #修改完成之后重新加载docker和重启 systemctl daemon-reload systemctl restart docker #再次上传测试 docker push 192.168.8.10:5000/nginx:v1
本地dockerhost查看私有仓库镜像方法:进入到私有仓库的共享目录
cd /registry/docker/registry/v2/repositories/ ls
5)其他dockerhost上传私有仓库
这里注意,既然是私有仓库,肯定是要考虑多台DockerHost共用的情况, 如果有其他的DockerHost想要使用私有仓库,仅需要修改docker的配置文件,指定私有仓库的IP和端口即可。当然别忘了,更改过配置文件之后, daemon-reload ,restart docker服务。
修改docker配置文件
vim /usr/lib/systemd/system/docker.service [Service] ExecStart=/usr/bin/dockerd --insecure-registry 192.168.8.10:5000 systemctl daemon-reload systemctl restart docker.service docker info #看到私仓ip即为成功 Insecure Registries: 192.168.8.10:5000 127.0.0.0/8
查看仓库有哪些镜像
curl -XGET http://192.168.8.10:5000/v2/_catalog -X/--request 指定什么命令 -G/--get 以get的方式来发送数据 -E/--cert cert[:passwd] 客户端证书文件和密码 (SSL) -T/--upload-file 上传文件 curl http://localhost:5000/v2/_catalog #查看本地私有仓库镜像 curl http://192.168.8.10:5000/v2/nginx/tags/list {"name":"nginx","tags":["latest"]} //并看到详细的自定义 版本号