[TOC] ## 1、Harbor镜像仓库 需要依赖Python 2.7或以上版本,Docker引擎1.10以上,还有Docker Compose 1.6.0或以上版本。 注:CentOS 7.2自带Python 2.7.5 安装Harbor 下载最新的offline离线安装包https://github.com/goharbor/harbor/releases 解压安装包tar xvf harbor-offline-installer-v1.7.4.tgz 修改配置文件harbor.cfg 必需的参数有: 1.hostname:目标主机的主机名,用于访问UI和注册服务。不能使用localhost和127.0.0.1,因为harbor需要被外部客户端访问,我这里修改成了IP地址。 2.ui\_url\_protocol:用于访问UI和令牌/通知服务的协议,默认为http,如果在Nginx上启用了SSL认证可以设置成https,我这里用的默认的http。 3.max\_job\_workers:作业服务中的最大复制worker数,这里默认写的50,考虑到我的服务器的性能,我这里修改成了5。 4.customize\_crt:设置为on,prepare脚本创建用于生成/验证注册表令牌的私钥和根证书。如果设置成off,密钥和根证书将由外部源提供,我设置的是on。 5.ssl\_cert:SSL证书的位置,只有协议设置成https的时候,这个属性才会生效。 6.ssl\_cert\_key:SSL秘钥的位置,只有协议设置成https的时候,这个属性才会生效。 7.secretkey\_path:密码存放的路径,这里最好别修改,否则后面会报错,我修改成了/data/。 8.log\_rotate\_count:日志文件保留的数量,达到最大值后会循环删除之前的日志。 9.log\_rotate\_size:每个日志的大小,我为了节省空间设置日志最多保留5个,每个最大200MB。 10.db\_password:用于DB身份验证的MySQL数据库的根密码。 11.harbor\_admin\_password:设置admin的密码,默认Harbor12345 运行prepare更新参数./prepare 开始安装,执行./install.sh进行安装 安装完成,访问一下http://ip 测试一下 docker pull hello-world docker tag hello-world xxx.xxx.xxx.xxx/library/hello-world docker push xxx.xxx.xxx.xxx/library/hello-world 报443端口问题请参考http://www.ilkhome.cn/?post=450 push镜像失败,报denied: requested access to the resource is denied 解决办法:遇到这种情况,登录一下harbor仓库,登录成功,就OK了。 ~~~ docker login xxx.xxx.xxx.xxx Username: admin Password: Login Succeeded ~~~ 停止: ~~~ docker-compose -f docker-compose.yml stop ~~~ 启动: ~~~ docker-compose -f docker-compose.yml start ~~~ ## 2、registry镜像仓库 获取registry镜像 ~~~ docker pull registry:latest ~~~ 启动一个容器 ~~~ docker run -d -v /docker/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest ~~~ Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/docker/registry目录挂载到该目录,即可实现将镜像保存到主机的/docker/registry目录了。 运行docker ps看一下容器情况 检查5000端口 ~~~ netstat -an | grep 5000 ~~~ 打开浏览器输入[http://127.0.0.1:5000/v2](http://127.0.0.1:5000/v2),出现{}说明registry运行正常 验证 现在我们通过将镜像push到registry来验证一下。 我的机器上有个hello-world的镜像,我们要通过docker tag将该镜像标志为要推送到私有仓库 ~~~ docker tag hello-world 127.0.0.1:5000/hello-world ~~~ 接下来,我们运行docker push将hello-world镜像push到我们的私有仓库中 ~~~ docker push 127.0.0.1:5000/hello-world ~~~ 现在我们可以查看我们本地/docker/registry目录下已经有了刚推送上来的hello-world。我们也在浏览器中输入[http://127.0.0.1:5000/v2/\_catalog](http://127.0.0.1:5000/v2/\_catalog),可以看到{"repositories": \[hello-world\]} 现在我们可以先将我们本地的127.0.0.1:5000/hello-world和hello-world先删除掉 ~~~ docker rmi hello-worlddocker rmi 127.0.0.1:5000/hello-world ~~~ 然后使用docker pull从我们的私有仓库中获取hello-world镜像 ~~~ docker pull 127.0.0.1:5000/hello-world ~~~ 可能问题 可能会出现无法push镜像到私有仓库的问题。这是因为我们启动的registry服务不是安全可信赖的。这是我们需要修改docker的配置文件在你要远程访问 docker registry 的机器上,修改文件 /etc/default/docker 或 /etc/sysconfig/docker,具体是哪个取决于你的系统,添加下面的内容 ~~~ ADD_REGISTRY='--add-registry xxx.xxx.xxx.xxx:5000'DOCKER_OPTS="--insecure-registry xxx.xxx.xxx.xxx:5000"INSECURE_REGISTRY='--insecure-registry xxx.xxx.xxx.xxx:5000' ~~~ 然后重启docker后台进程 service docker restart 这时候再push即可 部署WebUI 目前找到了两个 web ui,一个是 docker-registry-frontend[https://github.com/kwk/docker-registry-frontend](http://www.ilkhome.cn/index.php/go/aHR0cHM6Ly9naXRodWIuY29tL2t3ay9kb2NrZXItcmVnaXN0cnktZnJvbnRlbmQ=),另一个是 hyper/docker-registry-web[https://hub.docker.com/r/hyper/docker-registry-web/](http://www.ilkhome.cn/index.php/go/aHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2h5cGVyL2RvY2tlci1yZWdpc3RyeS13ZWIv)。 这两个 ui 功能差不多,只需任选其一就可以了。截止到我安装的时候,docker-registry-frontend 的功能还不完善,没有删除镜像的功能,只能浏览。后一个同时具备 删除和浏览 的功能。 1、创建工作目录 ~~~ $ mkdir -p /docker/registryconf /docker/webconf$ cd /docker ~~~ 2、建一个用于 registry 的配置文件 ~~~ $ vim /docker/registryconf/config.yml ~~~ ~~~ version: 0.1log:  level: info  formatter: text  fields:    service: registry-srv    environment: productionstorage:  cache:    layerinfo: inmemory  filesystem:    rootdirectory: /var/lib/registry  delete:    # 要在 ui 上能够删除镜像,enable 的值必须是 true    enabled: truehttp:  addr: :5000 ~~~ 3、新建一个用于 ui 的配置文件 ~~~ $ vim /docker/webconf/config.yml ~~~ ~~~ registry:  # Docker registry url  url: http://registry-srv:5000/v2   # Docker registry fqdn  name: localhost:5080  # To allow image delete, should be false  readonly: false  auth:    # Disable authentication    enabled: false ~~~ 4、新建一个启动脚本 ~~~ $ vim docker-compose-registry.yml ~~~ ~~~ version: '2'services: registry-srv: image: registry volumes: - /docker/registryconf:/etc/docker/registry:ro - /docker/registry:/var/lib/registry - /etc/localtime:/etc/localtime container_name: registry-srv restart: always ports: - "5000:5000" registry-web: image: hyper/docker-registry-web volumes: - /docker/webconf:/conf/:ro - /etc/localtime:/etc/localtime container_name: registry-web depends_on: - registry-srv restart: always ports: - "5080:8080" ~~~ 5.启动 ~~~ docker-compose -f docker-compose-registry.yml up -d ~~~ 打包好的配置文件放在/根目录 运行docker-compose -f docker-compose-registry.yml up -d即可启动 [下载配置文件docker.zip](http://www.ilkhome.cn/content/uploadfile/201812/74eb1544688617.zip)