一、第三方仓库
二、私有仓库搭建使用
2.1私有仓库搭建
docker私有仓库搭建很简单,一条命令即可.
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry:2
-p 5000:5000 表示将linux的5000映射到docke容器的5000端口。你可以理解为监听linux的5000端口
-v /opt/data/registry:/var/lib/registry 表示将镜像存放到linux宿主机的/opt/data/registry目录,默认镜像存放在容器的/var/lib/registry目录。
registry:2 表示从远程仓库下载的镜像
还可加上
--restart=always : 自动重启
--name registry :仓库名称
可以看到私有仓库已经搭建成功,并创建了一个4be7da92的容器。
执行curl -X GET http://127.0.0.1:5000/v2/_catalog收到的响应如下,是个json对象,其中repositories对应的值是空的json数组,表示目前仓库里还没有镜像:
[root@adsl-172-10-101-250 /]# curl -X GET http://127.0.0.1:5000/v2/_catalog
{"repositories":[]}
2.2支持http协议推送
docker默认使用https协议实现镜像的推送,如果你直接使用docker push命令会报错。这里我们改为让他支持http协议。
参看网上教程第一步修改/etc/default/docker文件,在该文件中增加DOCKER_OPTS="--insecure-registries ip:port"。
有的同学可能并没有该文件,这是docker版本的原因,高版本的docker在/etc/docker/daemon.json文件中加入。"insecure-registries":["ip:port"]即可。具体如下,如果配置了镜像仓库代理,那么两者需要,隔开。其中ip为你linux的ip,port为刚才我们监听的端口号。
再修改 /lib/systemd/system/docker.service。增加EnvironmentFile=-/etc/docker/daemon.json
此句表示使用daemon.json做为环境配置.
执行以下命令,重新加载配置信息再重启docker服务:
systemctl daemon-reload;service docker restart
2.3镜像上传到私有仓库
1.为要推送到私有仓库的镜像打标签,注意标签的格式为ip:port/imageName。注意一定要这种格式。至于为什么,还有待考察。
2.使用push推动到私有仓库
3.查看私有仓库
使用curl -X GET http://127.0.0.1:5000/v2/_catalog,可以看到myhello镜像。注意因为我们在本机操作所以使用127.0.0.1可以看到输出,最好还是使用本机ip地址。
2.3从私有仓库下载镜像
为了演示效果,先删除已有172.10.101.250:5000/myhello镜像。
docker rmi 172.10.101.250:5000/myhello
然后从私有仓库获取镜像
docker pull 172.10.101.250:5000/myhello
2.4运行私有仓库下载的镜像
docker run -it 172.10.101.250:5000/myhello
三、杂项
3.1如何进入仓库容器?
我们一般使用exec进入到容器的bash,命令为 docker exec -it 4be7da92d986 /bin/bash,可是报错了。因为仓库镜像的基础镜像是alpine,他没有bash,但是他有sh,所以应该为docker exec -it 4be7da92d986 sh
参考
2.alpine docker exec: "/bin/bash": stat /bin/bash: no such file or directory 解决方案