一 需要条件
需要部署本地仓库的服务器一台(下面简称目标服务器),并且安装docker
二 具体步骤
1.拉取官方仓库镜像registry,放到目标服务器下
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry 2 ee585077aecf 21 months ago 33.19 MB
2.在目标服务器运行镜像
[root@docker ~]# docker run -d -p 5000:5000 -v /myregistry:/var/lib/registry registry:2
- registry镜像的内部端口号为5000
- -v表示将本地存储空间映射到容器内部,而/var/lib/registry为容器内部的存储位置
3.修改协议
因为docker镜像拉取默认使用的是https协议,不支持http,我们需要将我们的私有仓库设置安全访问,这样就能通过http拉取了
然后在”/etc/docker/“目录下,创建”daemon.json“文件。并添加
[root@docker ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["docker.erick.com:5000"] # 这里的docker.erick.com换成你的域名或ip
}
备注:有的是通过这种方式进行,我直接通过上面的方式就配置成功了。(centos 6.5)
sudo vim /etc/sysconfig/docker
other_args="--insecure-registry xxx.xxx.xxx.xxx:5000" 修改这一行,xxx是你电脑的IP地址
sudo /etc/init.d/docker restart
重新启动docker:service docker restart
4.上传镜像到私有仓库
1.使用docker tag命令修改目标镜像的名称改为:目标服务器IP(域名):5000/imagename:tag
2.docker push 目标服务器IP(域名):5000/imagename:tag
5.查看私有仓库
# 在目标服务器查看,刚才我们用-v映射的地址为/myregistry
[root@docker~]# ls /myregistry/docker/registry/v2
blobs/ repositories/
[root@docker~]# ls /myregistry/docker/registry/v2/repositories
imagename:tag
# 也可也登陆对应的网址进行查看
http://docker.erick.com:5000/v2/_catalog
6.拉取镜像
docker pull docker.erick.com:5000/imagename:tag
7.获取私有仓库中镜像名称的脚本
import requests
import json
import traceback
repo_ip = '10.100.4.20'repo_port = 5000
def getImagesNames(repo_ip,repo_port):
docker_images = []
try:
url = "http://" + repo_ip + ":" +str(repo_port) + "/v2/_catalog"
res =requests.get(url).content.strip()
res_dic = json.loads(res)
images_type = res_dic['repositories']
for i in images_type:
url2 = "http://" + repo_ip + ":" +str(repo_port) +"/v2/" + str(i) + "/tags/list"
res2 =requests.get(url2).content.strip()
res_dic2 = json.loads(res2)
name = res_dic2['name']
tags = res_dic2['tags']
for tag in tags:
docker_name = str(repo_ip) + ":" + str(repo_port) + "/" + name + ":" + tag
docker_images.append(docker_name)
print docker_name
except:
traceback.print_exc()
return docker_images
a=getImagesNames(repo_ip, repo_port)
#print a