关于搭仓库等可以看Nexus系列。
首先要先在Nexus上创建仓库,点上面菜单栏的“Server administration and configuration”图标然后点左边菜单“Repository”->“Repositories”->“Create repository”然后选择对应的仓库类型。
主要是填写“Name”、“HTTP”以及为了兼容V1 API而勾选“Enable Docker V1 API:”下面的“Allow clients to use the V1 API to interact with this repository”,其中Name不能修改。
下面依次创建宿主仓库(Hosted)、代理仓库(Proxy)、仓库组(Group)。
创建宿主仓库(Hosted)
仓库类型选“docker (hosted)”,保存后生成的URL为http://localhost:8081/repository/docker-hosted。
创建代理仓库(Proxy)
仓库类型选“docker (proxy)”,“Remote storage”可以用网易http://hub-mirror.c.163.com或者其他厂商的。
创建仓库组(Group)
照上面然后选“docker (group)”。
创建完仓库,通过“sudo vim /etc/docker/daemon.json”修改配置文件,添加“insecure-registries”并把上面创建的仓库配进来。
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
"insecure-registries": ["localhost:8082", "localhost:8083", "localhost:8084"]
}
然后重启docker,如果是Linux通过“sudo systemctl restart docker”重启docker,如果是Windows或者macOS直接通过Docker Desktop重启即可。
我们先尝试搜索8082端口的宿主仓库上有没有“alpine”镜像,可以看到没登录直接提示“Error response from daemon: Unexpected status code 401”,这是因为“Security”->“Anonymous Access”->“Access”没勾选“Allow anonymous users to access the server”开启匿名访问,登录后再搜索显示没有,在8083端口的代理仓库则可以搜索到“alpine”镜像。
接着我们尝试把本地的nginx推送到宿主仓库上,先打tag,再push镜像,最后登出,然后在后台点左上角菜单“Browse server contents”再点左边菜单“Browse”打开上面创建的宿主仓库就可以看到刚刚推上来的镜像,点上面的“HTML View”查看具体信息。
这样就在Nexus上搭Docker私服并push推送镜像到仓库上了,下面附上一些操作命令。
//登录
docker login localhost:8082 -u xbt
docker login localhost:8083 -u xbt
docker login localhost:8084 -u xbt
//搜索镜像
docker search localhost:8082/alpine
docker search localhost:8083/alpine
docker search localhost:8084/alpine
//拉镜像
docker pull localhost:8083/alpine
//先打tag
docker tag nginx:latest localhost:8082/nginx:latest
//在推送到宿主仓库
docker push localhost:8082/nginx:latest
//删除tag
docker rmi localhost:8082/nginx:latest
//登出
docker logout localhost:8082
docker logout localhost:8083
docker logout localhost:8084
细心的话,你会发现直接通过docker pull的镜像都会被pull到代理仓库中;通过代理仓库pull镜像第一次会比较慢之后就比较快了,那是因为它先下载到代理仓库再拉到本地;只能通过手动push之后宿主仓库中才会有该镜像;只要宿主仓库或代理仓库中有的镜像,在仓库组才会有,因为仓库组就是宿主仓库和代理仓库的组合。
有个问题,通过代理仓库能search到的镜像,再通过代理仓库pull的时候有的会报“Error response from daemon: manifest for localhost:8083/gogs/gogs:latest not found: manifest unknown: manifest unknown”,但是直接pull却没问题。所以还是直接pull比较好,这样代理仓库就只起到再pull比较快的作用,而且还会拖慢第一次pull,不过搭这样的私库也可以提速其他人pull相同的镜像。
可以设置“Docker – Delete incomplete uploads”、“Docker – Delete unused manifests and images”等定时任务来删除没用数据,也可以通过“Cleanup Policies”清理策略来清理仓库。
另外,可能会因为地址、端口配错,或者是没有映射上面的端口,或者nexus容器没有运行,而报以下的错误。
Error response from daemon: login attempt to http://localhost:8081/v2/ failed with status: 404 Not Found
Error response from daemon: Get "https://192.168.1.101:8081/v2/": http: server gave HTTP response to HTTPS client
Error response from daemon: Get "https://192.168.1.101/v2/": dialing 192.168.1.101:443 with direct connection: connecting to 192.168.1.101:443: dial tcp 192.168.1.101:443: connect: connection refused
Error response from daemon: Get "http://localhost:8082/v2/": dial tcp [::1]:8082: connect: connection refused
Error response from daemon: invalid registry endpoint "http://localhost:8082/v1/". HTTPS attempt: Get "https://localhost:8082/v1/_ping": dial tcp [::1]:8082: connect: connection refused. HTTP attempt: Get "http://localhost:8082/v1/_ping": dial tcp [::1]:8082: connect: connection refused
历史上的今天:
- 2020: 小程序开发[使用uni-app插件](0)
展开阅读全文
上一篇: Gradle打包Java项目并发布jar包到Maven仓库Nexus上
下一篇:使用docker exec -it xxx /bin/bash命令进入容器时报错OCI runtime exec failed