1. 部署registry
[root@sophia~]# docker pull registry
Using default tag: latest
[root@sophia installer]# docker tag registry:latest registry:v2
创建存放image的目录
[root@sophia installer]# mkdir /var/lib/docker/repository
运行container
docker run -d -p 5000:5000 --name registry-container --restart=always -v /var/lib/docker/repository:/var/lib/registry registry:v2
目前一般都是使用v2版本的, -v指定了宿主机上的目录用来作为docker仓库的存储位置,如果不指定的话,registry镜像重启之后会丢失已经存储在本地仓库的镜像文件。
[root@sophia installer]# docker ps | grep registry
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4f51c1c6d55 registry:v2 "/entrypoint.sh /etc…" 3 seconds ago Up 1 second 0.0.0.0:5000->5000/tcp registry-container
查看registry镜像仓库,镜像仓库为空
curl -X GET http://sophia:5000/v2/_catalog
{"repositories":[]}
2. 上传镜像到仓库
[root@sophia product]# docker tag rancher/pause-amd64:3.1 sophia:5000/mods/modstest:1.0
[root@sophia product]# docker push sophia:5000/mods/modstest:1.0
The push refers to repository [sophia:5000/mods/modstest]
Get https://sophia:5000/v2/: Forbidden
出错是因为本地默认使用的是https进行上传,这是因为我们启动的registry服务不是安全可以信赖的,这个时候需要修改docker的配置文件/etc/docker/daemon.json,添加--insecure-registry sophia:5000,在重启docker服务
[root@sophia installer]# vi /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "10"
},
"insecure-registries": [
"sophia:5000"
]
}
重新上传
如果还是出错,比如有代理设置,并且属于公司内部服务器,出错内容为:
http://sophia:5000/v2/mods/modstest/blobs/uploads/</a></div> </td></tr><tr> <td class="hr"><hr></td> </tr> <tr><td class="eu_co fo"> Need help? Contact our support team at 5757 </td></tr> <tr><td class="eu_co st"> <span class="s_img"></span> Your organization has selected Zscaler to protect you from internet threats.
或者用IP:
[root@sophia product]# docker push sophia:5000/modstest:1.0
The push refers to repository [sophia:5000/modstest]
Get http://sophia:5000/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
需要修改docker使用的proxy
查看proxy:docker system info
修改proxy,依赖于proxy设置的方式,我自己遇到的两种情况:
情况1:
如果使用了[root@sophia installer]# vi /usr/lib/systemd/system/docker.service,需要找proxy的位置把本机的IP或者hostname或者需要使用的hostname添加的noproxy
Environment="HTTP_PROXY=http://proxy.com:8080/"
Environment="HTTPS_PROXY=https://proxy.com:8080/"
Environment="NO_PROXY=docker.test.com,10.111.13.81,sophia"
情况2:
[root@sophia product]# vi /etc/systemd/system/docker.service.d/http-proxy.conf
[root@sophia product]# vi /etc/systemd/system/docker.service.d/https-proxy.conf
[Service]
Environment="HTTP_PROXY=http://proxy.com:8080" "NO_PROXY=localhost,127.0.0.1,docker.test.com,sophia,10.111.13.81"
[root@sophia product]# systemctl daemon-reload
[root@sophia product]# systemctl restart docker
3. 下载镜像
在需要下载的image的机器上如果遇到和上传时相同的问题,参考上边上传镜像遇到问题,然后就可以docker pull了