对于一个企业来说image的仓库一定是要在自己的服务器上的,更不要提dockerhub还在美国。
若果要在企业内部使用docker技术部署服务,必然绕不开大量image的存放管理。比如java开发中各种jar包的管理,一般都会自己搭建nexus服务器,在docker这里叫做registry。
Registry具体是什么?
Registry就是dockerhub的本地版概念,如:共有的github对于私有的gitlab,又如Maven的nexus公服和私服一般。
- Dockerhub -> Registry
- Github -> Gitlab(私)
- Nexus(公) -> Nexus(私)
Registry不同与gitlab、nexus,它没有ui界面只是一个后台的程序,而且运行在docker容器中。
搭建registry
我们执行docker search registry
命令,如下:
可以看出registry是官方提供的一个image,目前已是2.0版本。
在local machine中安装registry服务
第一步 使用命令docker ssh local
进入local machine。
第二步 docker pull registry:2
dockerhub中拉取镜像。
第三步 启动镜像docker run -d -p 5000:5000 --name registry registry:2
,可以加上--restart=always
让registry随host一起自动启动
docker-machine安装的host中只有docker engine,也就是只有docker命令可以使用。
第四步 推送image到本地registry中
查看registry的地址: docker-machine url local
tcp://192.168.99.101:2376
构建local的image tag:docker tag hello-world 192.168.99.101:5000/local-hello
推送到registry上:docker push 192.168.99.101:5000/local-hello
第五步 浏览器验证是否push成功http://192.168.99.101:5000/v2/_catalog
,结果如下:
{"repositories":["hello-2"]}
在local machine中安装registry-frontend服务
Registry UI 目前只有有两个docker-registry-frontend和docker-registry-web,这里我们选择前一种。
sudo docker run \
-d \
-e ENV_DOCKER_REGISTRY_HOST=192.168.99.101 \
-e ENV_DOCKER_REGISTRY_PORT=5000 \
-p 8080:80 \
konradkleine/docker-registry-frontend:v2
打开浏览器访问地址: http\://192.168.99.101:8080/
Registry 安装踩到的坑
docker push
不成功,提示:http: server gave HTTP response to HTTPS client
因为registry本地安装时没开启https功能,而docker-cli采用的是https导致了冲突。网上很多说配置/ect/docker/daemon.josn文件,添加insecure-registies项可以解决,却是linux下解决方案,window下的docker toolbox配置是不同的。
{
"insecure-registries": [
"hub.docker.jiankunking.io:5000"
]
}
window的docker toolbox配置 /var/lib/boot2docker/profile文件。
友情链接
官方registry文档:registry。
关注作者博客完整:Owen Blog,更多深度文章。