2.使用nexus3配置docker私有仓库
1,配置走起
1,创建blob存储
登陆之后,先创建一个用于存储镜像的空间。

定义一个name,下边的内容会自动补全。

然后保存。

注意:实际生产中使用,建议服务器存储500G或以上。
2,创建一个hosted类型的docker仓库
Hosted类型仓库用作我们的私有仓库,替代harbor的功能。
点击步骤如下:

而后可见所支持种类之丰富,可见一斑。

这里我们看到docker类型有三种:

hosted: 本地存储,即同 docker 官方仓库一样提供本地私服功能。proxy: 提供代理其他仓库的类型,如 docker 中央仓库。group: 组类型,实质作用是组合多个仓库为一个地址。
先来创建一个hosted类型的私有仓库。
点击 Repository下面的 Repositories – Create repository – docker(hosted) :
Name: 定义一个名称docker-local
Online: 勾选。这个开关可以设置这个Docker repo是在线还是离线。
Repository Connectors
下面包含HTTP和HTTPS两种类型的port。
有什么用呢?说明讲得很清楚:
连接器允许docker客户端直接连接到docker仓库,并实现一些请求操作,如docker pull, docker push, API查询等。但这个连接器并不是一定需要配置的,尤其是我们后面会用group类型的docker仓库来聚合它。
我们把HTTP这里勾选上,然后设置端口为8083。
Allow anonymous docker pull
不勾选。这样的话就不允许匿名访问了,执行docker pull或 docker push之前,都要先登录:docker login
Docker Registry API Support
Docker registry默认使用的是API v2, 但是为了兼容性,我们可以勾选启用API v1。
Storage
Blob store:我们下拉选择前面创建好的专用blob:docker-hub。
Hosted
开发环境,我们运行重复发布,因此Delpoyment policy 我们选择Allow redeploy。
整体配置截图如下:

3,创建一个proxy类型的docker仓库
proxy类型仓库,可以帮助我们访问不能直接到达的网络,如另一个私有仓库,或者国外的公共仓库,如官方的dockerhub镜像库。
创建一个proxy类型的仓库
Name: proxy-docker-hub
Repository Connectors: 不设置。
Proxy
Remote Storage: docker hub的proxy,这里填写: https://registry-1.docker.io 这个是官方默认的一个链接
Docker Index: Use Docker Hub
Storage:idocker-hub
整体配置截图如下:



4,创建一个group类型的docker仓库
group类型的docker仓库,是一个聚合类型的仓库。它可以将前面我们创建的3个仓库聚合成一个URL对外提供服务,可以屏蔽后端的差异性,实现类似透明代理的功能。
name:docker-group
Repository Connectors:启用了一个监听在8082端口的http连接器;
Storage:选择专用的blob存储idocker-hub。
group : 将左边可选的3个仓库,添加到右边的members下。
整体配置截图如下:


最终效果

到这儿,nexus在docker这一块是部署已经完成了,但是这样并不能很好的使用。因为group仓库并不能推送镜像,因为你推送自己制作的镜像到仓库还得通过本地仓库的端口去推送,很不方便!
有一个解决方法:通过Nginx来判断推镜像还是拉镜像,然后代理到不同端口
5,nginx代理方式访问仓库
在部署 Nginx 部分,需要先生成自签名 SSL 证书,因为后面不想在 docker pull 的时候还要带一个端口!这里需要 2 个域名,一个用来展示 nexus 前台,另一个用做 docker 仓库,比如:
- nexus 前台:
repo.ald.com - docker 仓库:
idocker.io
1.安装nginx
yum -y install nginx
2.生成证书
这里推荐一个一键生成工具,大家可以尝试使用:https://github.com/Fishdrowned/ssl ,使用方法请参考作者说明。
Ps:如果你打算做外网仓库服务,那也可以去申请一个免费SSL证书,我这边是内部oa域名使用,所以只能用自签名证书了。
创建证书方式如下:
#直接切换到应用目录
# cd /etc/nginx/conf.d/
#下载工具
# git clone https://github.com/Fishdrowned/ssl.git
Cloning into 'ssl'...
remote: Enumerating objects: 106, done.
remote: Total 106 (delta 0), reused 0 (delta 0), pack-reused 106
Receiving objects: 100% (106/106), 171.53 KiB | 286.00 KiB/s, done.
Resolving deltas: 100% (48/48), done.
#生成证书
# cd ssl
# ./gen.cert.sh idocker.io
Removing dir out
Creating output structure
Done
Generating a 2048 bit RSA private key
......+++
......................................................................................................................+++
writing new private key to 'out/root.key.pem'
-----
Generating RSA private key, 2048 bit long modulus
...............................................................................+++
.................................+++
e is 65537 (0x10001)
Using configuration from ./ca.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'CN'
stateOrProvinceName :ASN.1 12:'Guangdong'
localityName :ASN.1 12:'Guangzhou'
organizationName :ASN.1 12:'Fishdrowned'
organizationalUnitName:ASN.1 12:'idocker.io'
commonName :ASN.1 12:'*.idocker.io'
Certificate is to be certified until Jun 12 04:29:18 2022 GMT (730 days)
Write out database with 1 new entries
Data Base Updated
Certificates are located in:
lrwxrwxrwx 1 root root 37 6月 12 12:29 /etc/nginx/conf.d/ssl/out/idocker.io/idocker.io.bundle.crt -> ./20200612-1229/idocker.io.bundle.crt
lrwxrwxrwx 1 root root 30 6月 12 12:29 /etc/nginx/conf.d/ssl/out/idocker.io/idocker.io.crt -> ./20200612-1229/idocker.io.crt
lrwxrwxrwx 1 root root 15 6月 12 12:29 /etc/nginx/conf.d/ssl/out/idocker.io/idocker.io.key.pem -> ../cert.key.pem
lrwxrwxrwx 1 root root 11 6月 12 12:29 /etc/nginx/conf.d/ssl/out/idocker.io/root.crt -> ../root.crt
3.配置nginx
# ip地址可以换成内网ip
upstream nexus_docker_get {
server 192.168.75.11:8082;
}
upstream nexus_docker_put {
server 192.168.75.11:8083;
}
server {
listen 80;
listen 443 ssl;
server_name idocker.io;
access_log /var/log/nginx/idocker.io.log;
# 证书
ssl_certificate /etc/nginx/conf.d/ssl/out/idocker.io/idocker.io.crt; # 证书路径根据上面生成的来定
ssl_certificate_key /etc/nginx/conf.d/ssl/out/idocker.io/idocker.io.key.pem;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers '!aNULL:kECDH+AESGCM:ECDH+AESGCM:RSA+AESGCM:kECDH+AES:ECDH+AES:RSA+AES:';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;
# 设置默认使用推送代理
set $upstream "nexus_docker_put";
# 当请求是GET,也就是拉取镜像的时候,这里改为拉取代理,如此便解决了拉取和推送的端口统一
if ( $request_method ~* 'GET') {
set $upstream "nexus_docker_get";
}
# 只有本地仓库才支持搜索,所以将搜索请求转发到本地仓库,否则出现500报错
if ($request_uri ~ '/search') {
set $upstream "nexus_docker_put";
}
index index.html index.htm index.php;
location / {
proxy_pass http://$upstream;
proxy_set_header Host $host;
proxy_connect_timeout 3600;
proxy_send_timeout 3600;
proxy_read_timeout 3600;
proxy_set_header X-Real-IP $remote_addr;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}
nginx -t 检查没有问题的话,就可以启动nginx了。
4.客户端配置
部署完成之后,我们就可以找一台测试机器进行测试了,不过因为我们刚刚定义的是内部使用的域名,所以需要在测试机器上写hosts解析,并将证书拷贝过去,否则会报不信任的错误。
在上文介绍的一键生成自签名工具中,会生成一个根证书,名称为/etc/nginx/conf.d/ssl/out/idocker.io/root.crt,我们将这个文件上传到客户端服务器的 /etc/docker/certs.d/idocker.io 目录即可(注意目录需要创建,最后的文件夹名称和仓库域名保持一致:idocker.io)。
现在到一台新主机192.168.75.10上测试:
# 主机192.168.75.10上的操作
echo "192.168.75.11 idocker.io" >> /etc/hosts
mkdir -p /etc/docker/certs.d/idocker.io
# 然后去nexus主机上,将刚才的证书拷过来
scp root.crt root@192.168.75.10:/etc/docker/certs.d/idocker.io
接下来,就可以开始真正的使用了。
6,正式验证
1,pull镜像
[root@master ~]# docker pull redis
Using default tag: latest
latest: Pulling from library/redis
8559a31e96f4: Pull complete
85a6a5c53ff0: Pull complete
b69876b7abed: Pull complete
a72d84b9df6a: Pull complete
5ce7b314b19c: Pull complete
04c4bfb0b023: Pull complete
Digest: sha256:800f2587bf3376cb01e6307afe599ddce9439deafbd4fb8562829da96085c9c5
Status: Downloaded newer image for redis:latest
docker.io/library/redis:latest
2,登陆私服
这个地方也可能在登陆的时候会报错,说证书过期什么的,如下:
Error response from daemon: Get https://idocker.io/v1/users/: x509: certificate has expired or is not yet valid
报这个错的情况下,大概原因只有一个,那就是,两台服务器的时间不一致,只需要将两台服务器时间保持一致即可。
yum -y install ntpdate && ntpdate -u cn.pool.ntp.org
分别在两台主机执行之后,发现登陆就成功了。
[root@master ~]# docker login -u admin -p admin idocker.io
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
3,打标签
docker tag docker.io/library/redis:latest idocker.io/nginx
4,push镜像
[root@master ~]# docker push idocker.io/nginx
The push refers to repository [idocker.io/nginx]
7b9c5be81844: Pushed
67c707dbd847: Pushed
72d3a7e6fe02: Pushed
cdaf0fb0082b: Pushed
e6b49c7dcaac: Pushed
13cb14c2acd3: Pushed
latest: digest: sha256:76ff608805ca40008d6e0f08180d634732d8bf4728b85c18ab9bdbfa0911408d size: 1572
这里上传成功了,再去nexus3里边看看是有上去了。

5,测试从私服拉镜像
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 235592615444 43 hours ago 104MB
idocker.io/redis latest 235592615444 43 hours ago 104MB
[root@master ~]# docker rmi idocker.io/redis
Untagged: idocker.io/redis:latest
Untagged: idocker.io/redis@sha256:76ff608805ca40008d6e0f08180d634732d8bf4728b85c18ab9bdbfa0911408d
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 235592615444 43 hours ago 104MB
[root@master ~]# docker pull idocker.io/redis
Using default tag: latest
latest: Pulling from redis
Digest: sha256:76ff608805ca40008d6e0f08180d634732d8bf4728b85c18ab9bdbfa0911408d
Status: Downloaded newer image for idocker.io/redis:latest
idocker.io/redis:latest
[root@master ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
redis latest 235592615444 43 hours ago 104MB
idocker.io/redis latest 235592615444 43 hours ago 104MB
7,代理的功能展示
当某一个镜像在我们本地仓库没有的时候,就需要从远程仓库拉取了,其他的私有仓库的操作大概都是要从远程拉取,然后在重复如上操作推到本地私有仓库,而nexus因为有了proxy功能,因此,当我们在pull远程镜像的时候,本地就会自动同步下来了.
以拉取gitlab镜像为例:
docker pull idocker.io/gitlab/gitlab-ce
Using default tag: latest
Trying to pull repository docker.io/gitlab/gitlab-ce ...
latest: Pulling from docker.io/gitlab/gitlab-ce
3b37166ec614: Pull complete
504facff238f: Pull complete
ebbcacd28e10: Pull complete
c7fb3351ecad: Pull complete
2e3debadcbf7: Pull complete
8e5e9b12009c: Pull complete
0720fffe6e22: Pull complete
2f336a213238: Pull complete
1656ee3e1127: Pull complete
25fa5248fd38: Pull complete
36b8c1d869a0: Pull complete
Digest: sha256:0dd22880358959d9a9233163147adc4c8f1f5d5af90097ff8dfa383c6be7e25a
Status: Downloaded newer image for docker.io/gitlab/gitlab-ce:latest
因为本地没有这个镜像,所以从远程仓库拉取,然后去仓库里看看啥情况:



经过查看可以发现:
docker-local里没有,proxy-docker-hub和docker-group里有
注意:删除的话只能在docker-local或proxy-docker-hub中删除,当在这两者中执行删除操作后,docker-group里会自动没有的

至此,基本上关于使用nexus3搭建docker私有仓库的知识点。
2.使用nexus3配置docker私有仓库的更多相关文章
- <二>企业级开源仓库nexus3实战应用–使用nexus3配置docker私有仓库
1,安装nexus3. 这个地方略了,安装部署可以参考:nexus3安装配置. 2,配置走起. 1,创建blob存储. 登陆之后,先创建一个用于存储镜像的空间. 定义一个name,下边的内容会自动补全 ...
- CentOS7下使用Sonatype Nexus3搭建Docker私有仓库
相关资料: Sonatype Nexus3官方网站:https://www.sonatype.com/download-oss-sonatype Sonatype Nexus3 Docker Hub地 ...
- <五>企业级开源仓库nexus3实战应用–使用nexus3配置npm私有仓库
一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通.事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存 ...
- 5.使用nexus3配置npm私有仓库
当我们运行前端项目的时候,常常在解决依赖的时候会加上一个参数npm install --registry=https://registry.npm.taobao.org将源指定为淘宝的源,以期让速度加 ...
- <六>企业级开源仓库nexus3实战应用–使用nexus3配置yum私有仓库
一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通.事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存 ...
- <三>企业级开源仓库nexus3实战应用–使用nexus3配置maven私有仓库
一两个星期之前,你如果在我跟前说起私服的事情,我大概会绕着你走,因为我对这个东西真的一窍不通.事实上也正如此,开发同学曾不止一次的跟我说公司的私服版本太旧了,许多新的依赖编译之后不会从远程仓库自动缓存 ...
- 9.使用nexus3配置Python私有仓库
搭建Python私服,我们依旧使用nexus3. 与其他私服一样的,Python私服同样有三种类型: hosted : 本地存储,便于开发者将个人的一些包上传到私服中 proxy : 提供代理其他仓库 ...
- 3.使用nexus3配置maven私有仓库
配置之前,我们先来看看系统默认创建的都有哪些 其中圈起来的都是系统原有的,用不到,就全删掉,重新创建. 1,创建blob存储 2,创建hosted类型的maven 点击 Repository下面的 R ...
- 6.使用nexus3配置yum私有仓库
yum相较于rpm,能够更好地解决安装软件时的依赖包问题,使用yum安装更简单更方便.搭建本地YUM源服务器,可以避免升级安装软件时占用公网带宽:有了本地YUM源服务器,可以解决无法连接Interne ...
随机推荐
- MyCat垂直分库
一.什么是垂直分库 将一类功能的表从一个实例切分到另一个实例,横向扩展实例,增加写负载 目标:将1个实例的4类表拆分多4个实例中 二.垂直切分步骤 2.1收集分析业务模块间的关系,能分几个库 2.2全 ...
- C# 数据操作系列 - 13 SugarSql初探
0. 前言 前言,暂时挥别NHibernate(虽然我突然发现这玩意还挺有意思的,不过看得人不多).大步进入了有很多小伙伴向我安利的SQLSugar,嗯,我一直叫SugarSQL,好像是这个吧? 这是 ...
- SQL server数据库的密码策略与登录失败锁定策略
SQL server数据库本身没有密码复杂度策略设置,它是使用Windows操作系统的校验函数来校验账户密码的,所以查看SQL server数据库密码复杂度需要结合操作系统本地安全策略的密码策略来看. ...
- [jQuery插件]手写一个图片懒加载实现
教你做图片懒加载插件 那一年 那一年,我还年轻 刚接手一个ASP.NET MVC 的 web 项目, (C#/jQuery/Bootstrap) 并没有做 web 的经验,没有预留学习时间, (作为项 ...
- 【JavaScript数据结构系列】04-优先队列PriorityQueue
[JavaScript数据结构系列]04-优先队列PriorityQueue 码路工人 CoderMonkey 转载请注明作者与出处 ## 1. 认识优先级队列 经典的案例场景: 登机时经济舱的普通队 ...
- TensorFlow的checkpoint文件转换为pb文件
由于项目需要,需要将TensorFlow保存的模型从ckpt文件转换为pb文件. import os from tensorflow.python import pywrap_tensorflow f ...
- C# 基础之参数修饰符
参数传参的时候一共有四种传递方式: 一.无修饰符传参 也就是说没有传参修饰符,这种情况传过去的是一个副本,本体是不会被改变的 二.out传参修饰符 在传参的参数全面加一个out: public voi ...
- samba修复
在之前有讲过一个samba无法连接的情况,这次碰到的是samba依赖被弄坏后还原. 注:可能不是很详细,因为时间原因,可能不够完整或缺少记录和截图. 作为记录和参考. 问题:因为对ubuntu系统不太 ...
- 【PyTorch】深度学习与PyTorch资料链接整理
欢迎来到我的博客! 以下链接均是日常学习,偶然得之,并加以收集整理,感兴趣的朋友可以多多访问和学习.如果以下内容对你有所帮助,不妨转载和分享.(Update on 5,November,2019) 1 ...
- Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&MonoBehaviourSimplify 是框架?
我们花了 5 篇文章学习了消息机制的方方面面.并且完成了一个简易消息机制,之后集成到了我们的 MonoBehaviourSimplify 里. 现在 MonoBehaviourSimplify 有一点 ...