docker镜像私服registry架构

Owen Jia 2019年03月27日 246次浏览

对于一个企业来说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命令,如下:

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-local

第五步 浏览器验证是否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

local-container-ps

打开浏览器访问地址: http\://192.168.99.101:8080/

frontend-web

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文件。

insecure-registry

友情链接

官方registry文档:registry

关注作者博客完整:Owen Blog,更多深度文章。