kubernetes实战篇之nexus oss服务器部署及基于nexus的docker镜像仓库搭建
Nexus oss仓库管理平台搭建
Nexus是一款仓库管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各种仓库,说的通俗以下,就是私服镜像仓库.并且有免费版,OSS版即为免费版,下载的时候请注意版本的选择.
往下面滚动页面,可以看到Choose your Nexus
,有osx,windows和unix版本可供选择.这里我选择的是windows
版本.
下载的内容是一个压缩包,下载完成后把压缩包解压.解压后有两个文件夹,我们进入nexus-3.x.x
文件夹下的bin
目录,我们在当前目录下打开cmd
或者从任意位置打开cmd,然后cd到上述目录.执行nexus.exe /run
来安装nexus
注册服务
安装完成以后,执行nexus.exe /install Nexus Service
来注册服务
启动服务
执行命令nexus.exe /start Nexus Service
来启动服务
通过以上操作,实际上是往windows服务里面添加了一个名字叫作
nexus service
的服务,我们可以通过powerhsell命令Get-Service "nexus service"
来找到这个服务,通过Restart-Service "nexus service"
来重启它.
以上执行完成以后,就可以通过打开浏览器,输入localhost:8081
来访问它,也可以通过其它局域网主机使用IP:8081
方式来访问它.
通过首页,我们可以看到Nexus罗列出来的支持的仓库类型,非常丰富.
注意,大家可能看到我访问的端口号并不是
8081
而是8443,这是因为我设置的http自动跳转到https,并且指定的https端口为8443
,这里之所以要启用https是因为下面即将讲到的docker镜像上传需要使用https.这部分内容将在下一节讲解.
登陆
注意,如果没有登陆,Nexus并不是以显著的方式提示你登陆,但是非登陆用户功能受限.要想实现一些管理功能,必须登陆.登陆需要点击右上角
sign in
按钮.默认登陆用户名为admin
密码为admin123
.
Nexus搭建docker镜像仓库
上一节我们讲了如何在windows下安装nexus,本节我们讲解如何来搭建nexus来搭建docker镜像仓库.
我们进入web管理界面,点击齿轮
图标,然后点击Repositories
.如下图示
注意,以上操作需要登陆.登陆方式为点击右上角
sign in
,然后用默认admin
,admin123
登陆.详细请见上一节内容
然后点击create repository
按钮.如下图操作
页面出来了非常多的仓库类型供选择,由于我们要创建的是docker仓库,这里选择的是docker hosted
点击后出现如下界面
配置上面填写的内容,填写完成后我们点击左下角create repository
来创建仓库
nexus服务器支持https配置
由于我们使用的是https方式通讯,因此我们需要对nexus服务器进行配置,以支持https.由于我们的证书是自己生成的,因此docker客户端也需添加对自己生成key的信任.
服务端开启监听ssl协议端口
进到nexus-xxx-xxx
目录下(前面一节提到的从官网下载的nexus压缩包解压后的一个目录),进到ect
目录下,里面有一个nexus-default.properties
文件,用文本编辑器打开它
在# Jetty section
注释下面添加一行,内容为application-port-ssl=8443
在nexus-args
一行尾部添加,${jetty.etc}/jetty-http-redirect-to-https.xml
,以指示服务器自动将http跳转到https
生成证书秘钥
网上有很多生成密码证书的博客文章,使用的工具也不尽相同.这里,我们使用java jkd自带的keytool.exe
来生成ssl证书.
进入到nexus-xxx-xxx
目录下的ect/ssl
目录下,执行以下命令:
keytool -genkeypair -keystore keystore.jks -storepass nexus3 -keypass nexus3 -alias jetty -keyalg RSA -keysize 2048 -validity 5000 -dname "CN=${NEXUS_DOMAIN}, OU=Example, O=Sonatype, L=Unspecified, ST=Unspecified, C=US" -ext "SAN=DNS:${NEXUS_DOMAIN},IP:${NEXUS_IP_ADDRESS}" -ext "BC=ca:true"
其中${NEXUS_IP_ADDRESS}
替换为你的实际ip地址,${NEXUS_DOMAIN}如果没有域名可以随便填写
需要注意的是,如果由于环境变量配置问题导致
keytool
命令找不到,则需要显式指定keytool.exe
完整路径,然后后面带上要执行的命令.
修改jetty-https.xml
进入到nexus-xxx-xxx
目录下的etc/jetty
目录下,用文本编辑器打开jetty-https.xml
文件
把里面对应的内容修改为如下配置:
<Set name="KeyStorePath"><Property name="karaf.etc"/>/ssl/keystore.jks</Set>
<Set name="KeyStorePassword">nexus3</Set>
<Set name="KeyManagerPassword">nexus3</Set>
<Set name="TrustStorePath"><Property name="karaf.etc"/>/ssl/keystore.jks</Set>
<Set name="TrustStorePassword">nexus3</Set>
注意以上内容全是修改,而不是新增,修改的时候找到相同key的修改即可.
重启nexus服务器
可以通过上一节介绍的powershell命令Restart-Service "nexus service
来重启服务,以使配置生效.
需要注意的是,执行以上命令需要以管理员身份启动powershell.除了使用命令以外,也可以进入到服务管理里面找到名为
nexus service
的服务,然后手动重启它.
执行完以上配置以后,我们再打开浏览器访问https://..localhost:8443
或者http://localhost:8081
注意,重启服务以后,如果以上内容不能马上响应,可以等一会时间再观察看看.
配置客户端信任ca证书
我的docker服务器安装在192.168.122.65
上面.下面介绍centos和ubuntu下如何添加证书信任
centos下添加证书信任
#生成cert文件
[root@localhost ~]# keytool -printcert -sslserver 192.168.124.43:8443 -rfc >nexus.crt
[root@localhost ~]# yum install ca-certificates
[root@localhost ~]# update-ca-trust force-enable
# 还可以放在/etc/docker/certs.d/192.168.124.43:8443目录下
[root@localhost ~]# mv nexus.crt /etc/pki/ca-trust/source/anchors/nexus.crt
[root@localhost ~]# update-ca-trust
[root@localhost ~]# service docker restart
[root@localhost ~]# docker login -u admin -p admin123 192.168.124.43:8002
Login Succeeded
ubuntu下添加信任证书
对于Ubuntu系统来说certificate的存放路径是 /usr/local/share/ca-certificates
### 生成cert文件
[root@localhost ~]# keytool -printcert -sslserver 192.168.124.43:8443 -rfc >nexus.crt
# 还可以放在/etc/docker/certs.d/192.168.124.43:8443目录下
[root@localhost ~]# mv nexus.crt /usr/local/share/ca-certificates/nexus.crt
[root@localhost ~]# update-ca-certificates
[root@localhost ~]# service docker restart
[root@localhost ~]# docker login -u admin -p admin123 192.168.124.43:8002
在redhat系统中,如果报Unkonw authority错误,修改
/etc/pki/tls/openssl.cnf
。在其中的[ v3_ca]
部分,添加subjectAltName
选项
[ v3_ca ]
subjectAltName = IP:192.168.124.43
然后再执行以下命令
[root@localhost ~]# service docker restart
[root@localhost ~]# docker login -u admin -p admin123 192.168.124.43:8002
Login Succeeded
注,网上有不少介绍使用http访问的方法,但是却没有执行成功,大家可以尝试一下
[root@localhost centos]# vi /etc/docker/daemon.json
{
"insecure-registries": [
"192.168.124.43:8003"
],
"disable-legacy-registry": true
上传镜像到docker仓库
- 为镜像打标签
docker tag 镜像名:tag名 192.168.124.43:8002/镜像名:tag名
我里,我没有自己创建镜像,而是随便找了一个已以存在的镜像,然后打上标签,如下
192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend
通过执行docker push
命令把它推到远程私服仓库
[root@localhost ~]# docker push 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend
The push refers to a repository [192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend]
d62604d5d244: Pushed
1.4: digest: sha256:f63ced70bc85ca753e715c93b0adc3115510a6575129102383236c30112379e5 size: 528
[root@localhost ~]#
注意,推送前是需要先登陆的,登陆的方法上面也介绍过了
我们登陆nexus web管理界面,点击左侧Broswe
,可以看到已经有内容push进来了
我们执行docker search
命令
[root@localhost ~]# docker search 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4 0
[root@localhost ~]#
可以看到能够从远程服务器上搜索到它.
拉取上传的镜像
实际环境中,生成docker镜像和服务器和使用docker镜像的服务器往往不是同一台服务器.这里我们使用另一个服务器192.168.124.59
来拉取刚刚上传的镜像
需要注意的是,这里基于的前提是用于拉取镜像的服务器已经安装了docker,docker的安装可以参考其它章节或者网络上的教程
执行
keytool -printcert -sslserver 192.168.59.1:8443 -rfc >nexus.crt
执行
yum install ca-certificates
来安装
-紧接着执行update-ca-trust force-enable
执行
mv nexus.crt /etc/pki/ca-trust/source/anchors/nexus.crt
执行
update-ca-trust
service docker restart
执行login
docker login -u admin -p admin123 192.168.124.43:8002
[root@k8s-master ~]# docker login -u admin -p admin123 192.168.124.43:8002
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
然后我们执行docker pull
[root@k8s-master ~]# docker pull 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4
1.4: Pulling from rancher/nginx-ingress-controller-defaultbackend
5990baa43a5e: Pull complete
Digest: sha256:f63ced70bc85ca753e715c93b0adc3115510a6575129102383236c30112379e5
Status: Downloaded newer image for 192.168.124.43:8002/rancher/nginx-ingress-controller-defaultbackend:1.4
[root@k8s-master ~]#
注意pull的时候要带上版本的tag
以上,我们从一台服务器(192.168.122.65)推送镜像到私服,然后用另一台服务器拉取(192.168.124.59).需要注意的是,由于服务端使用了自已生成的https证书,因此docker镜像生产端和消费端都要添加ca证书信任
kubernetes实战篇之nexus oss服务器部署及基于nexus的docker镜像仓库搭建的更多相关文章
- kubernetes实战篇之部署一个.net core微服务项目
目录 继上一篇kubernetes理论知识完结.本篇主要讲解基于nexus搭建一个docker镜像仓库(当然大家实践过程是不必完全跟着做,也可以搭建harbor仓库或者直接把镜像推送到docker h ...
- kubernetes实战篇之创建密钥自动拉取私服镜像
系列目录 前面我们讲解了如何搭建nexus服务器,以及如何使用nexus搭建docker私有镜像仓库,示例中我们都是手动docker login登陆私服,然后通过命令拉取镜像然后运行容器.然而这种做法 ...
- kubernetes实战篇之docker镜像的打包与加载
系列目录 前面我们讲到了使用nexus搭建docker镜像仓库,操作还是有点复杂的,可能有的童鞋仅仅是想尝试kubernetes功能,并不想在搭建仓库上花费过多时间,但是又想在不同的主机之间传递镜像. ...
- springboot整合docker部署(两种构建Docker镜像方式)--2019-3-5转
原文:https://www.cnblogs.com/shamo89/p/9201513.html 项目结构 package hello; import org.springframework.boo ...
- springboot整合docker部署(两种构建Docker镜像方式)
项目结构 package hello; import org.springframework.boot.SpringApplication; import org.springframework.bo ...
- kubernetes实战篇之helm安装
系列目录 Helm是kubernetes的应用包管理工具,是CNCF孵化器下的一个项目,主要用来管理 Charts.类似于 Ubuntu 中的 APT 或 CentOS 中的 YUM.它提供了一种简单 ...
- kubernetes实战篇之helm填坑与基本命令
系列目录 其实前面安装部分我们已经分享一些互联网上其它网友分享的一些坑,本篇介绍helm的基本使用以及在使用过程中碰到的一些坑. 客户端版本和服务端版本不一致问题 有些朋友可能在使用helm init ...
- kubernetes实战篇之helm使用技巧
系列目录 使用压缩包安装chart 我们使用helm package打包的时候,默认会在当前位置生成一个tgz压缩包,然后helm把它复制到到$HOME/.helm/repository目录下,现在还 ...
- kubernetes实战(十四):k8s持久化部署gitlab集成openLDAP登录
1.基本概念 使用k8s安装gitlab-ce,采用GlusterFS实现持久化(注意PG使用的是NFS存储,使用动态存储重启postgresql的pod后无法成功启动pg,待解决),并集成了open ...
随机推荐
- Hibernate——(4)Hibernate映射类型
一.常用的Hibernat映射类型有如下几种: string integer double date 日期,只表示年月日 datetime 日期,只表示年月日 timestamp 时间戳,存放 ...
- Cannot refer to a non-final variable inside an inner class defined in a different method
http://stackoverflow.com/questions/1299837/cannot-refer-to-a-non-final-variable-inside-an-inner-clas ...
- 各种图示的介绍及绘制(boxplot、stem)
1. 箱线图(boxplot) 也叫作箱形图: 一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在各种领域也经常被使用,常见于品质管理. 主要包含六个数据节点,将一组数据从大到小排列,分 ...
- Windows安装Linux子系统--安装GUI界面
原文:Windows安装Linux子系统--安装GUI界面 前段时间发现Windows可以安装Linux子系统了,恰逢电脑换了固态,还没装Linux,不如趁机体验一番! 1.准备工作 1.1.打开 ...
- 创建网站 并未网站指定ftp用户
这里有个视频 前10分钟可以参考 在windows server2008 r2上面安装iis 带ftp服务 :http://v.youku.com/v_show/id_XMjUyMTE1MTI0NA= ...
- WPF中取得系统字体列表
原文:WPF中取得系统字体列表 在GDI+中,我们可以通过如下方式取得系统所有字体: foreach(FontFamily f in FontFamily.Families){ // 处理代码} ...
- σ 代数与测度(measures)
1. definition Let A be a collection of subsets(集合的集合体,collection of subsets) of a sample space Ω,A i ...
- WinEdt && LaTex(三)—— 宏包
amsmath:最常用的数学宏包 1. bm:bold math 数学字体加粗 \documentclass{article} \usepackage{bm} \begin{document} \[ ...
- python代码风格检查工具──pylint
pylint是一个python代码检查工具,可以帮助python程序员方便地检查程序代码的语法和风格,通过这个工具,可以使你的python代码尽量保持完美,哈哈.具体可以检查什么东西呢?比如你写了 f ...
- WPF特效-拼图游戏
原文:WPF特效-拼图游戏 此文主要描述我实现碎片化的便捷过程. 步骤1: 选取参考图如下(百度图库搜的): 步骤2: 根据效果图或者模型构建贝塞尔曲线,为了方便查看效果,可以设置控制点, ...