小弟在搭建docker 私有化仓库以及可视化工具中遇到不少问题,网上的解决方案也试过很多种,包括各种写错的,还有搞噱头的,很是让人费劲,经过不懈的努力,终于搭建成功了,再次分享下。
本文中使用的registry以及docker-registry-ui均为latest
。
一、在/etc/docker/daemon.json,配置daemon.json。(如果这个文件不存在就自己创建)
{
#镜像源管理,我增加了腾讯镜像源,可以提速
"registry-mirrors": [ "https://mirror.ccs.tencentyun.com" ],
#docker私服配置,因为不是https链接,所以在此配置
"insecure-registries":["192.168.2.100:5000"]
}
配置完成需要去重载配置和重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:此文件配置中insecure-registries是需要在push本地镜像到私有仓库或者pull私有仓库镜像到本地的主机上配置。
二、新建registry配置文件config.yml
version: 0.1
log:
accesslog:
disabled: true
level: debug
formatter: text
fields:
service: registry #registry服务名称
environment: staging
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
Access-Control-Allow-Origin: ['http://192.168.2.100:8022']
Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
Access-Control-Allow-Headers: ['Authorization', 'Accept']
Access-Control-Max-Age: [1728000]
Access-Control-Allow-Credentials: [true]
Access-Control-Expose-Headers: ['Docker-Content-Digest']
http2:
disabled: false
health:
storagedriver:
enabled: true
interval: 10s
threshold: 3
注意:
Access-Control-Allow-Origin: ['http://192.168.2.100:8022'],这块填写的docker-registry-ui服务的端口以及宿主机的ip
此文件是为了解决docker-registry-ui因为跨域产生的问题,后面会详细介绍
三、新建docker-compose.yml文件,通过
docker-compose同时启动registry和docker-registry-ui
两个容器
version: '2.0'
services:
registry:
image: registry
ports:
- 5000:5000
volumes:
- /var/lib/docker/volumes/registry:/var/lib/registry
- /opt/docker/docker-config/ui/config.yml:/etc/docker/registry/config.yml
ui:
image: joxit/docker-registry-ui
ports:
- 8022:80
environment:
- REGISTRY_TITLE=Popper Docker Registry
- REGISTRY_URL=http://192.168.2.100:5000
- SINGLE_REGISTRY=true
depends_on:
- registry
通过此命令启动该文件:
docker-compose up -d
此文件是是通过docker-compose来启动两个容器。
其中需要将第二步中的config跨域配置挂载在registry容器中
三、访问ui地址
访问:http://192.168.2.100:8022,即可访问ui地址
问题点:
1、第一步中,insecure-registries配置必须要有,因为docker 默认不允许http方式推送镜像(默认为https) ,但我们可以通过 docker 的配置选项来取消这个限制,也即第一步中centos7 的docker配置文件 /etc/docker/daemon.json
2、第二步中,如果通过命令分别去启动registry和ui两个容器,访问ui页面下方会出现错误跨域报错,也不会在页面上看到仓库的镜像文件:
An error occured: Check your connection and your registry must have Access-Control-Allow-Origin header set to http://xxx
所以必须要启动跨域后,私有仓库的ui框架才能顺利通过registry提供的接口拿到数据,不然会报跨域的错误。 当然也可以启动registry容器后,在进入容器里边进行跨域设置,不过相对来说比较麻烦。
希望自己遇到的诸多困难,能带给各位一点点小小的帮助,感谢。