系列目錄html
Nexus是一款倉庫管理工具,支持Npm,bower,maven,nuget,apt,yum甚至docker,helm等各類倉庫,說的通俗如下,就是私服鏡像倉庫.而且有免費版,OSS版即爲免費版,下載的時候請注意版本的選擇.java
下載地址nginx
往下面滾動頁面,能夠看到Choose your Nexus
,有osx,windows和unix版本可供選擇.這裏我選擇的是windows
版本.web
下載的內容是一個壓縮包,下載完成後把壓縮包解壓.解壓後有兩個文件夾,咱們進入nexus-3.x.x
文件夾下的bin
目錄,咱們在當前目錄下打開cmd
或者從任意位置打開cmd,而後cd到上述目錄.執行nexus.exe /run
來安裝nexusdocker
安裝完成之後,執行nexus.exe /install Nexus Service
來註冊服務shell
執行命令nexus.exe /start Nexus Service
來啓動服務json
經過以上操做,其實是往windows服務裏面添加了一個名字叫做
nexus service
的服務,咱們能夠經過powerhsell命令Get-Service "nexus service"
來找到這個服務,經過Restart-Service "nexus service"
來重啓它.ubuntu
以上執行完成之後,就能夠經過打開瀏覽器,輸入localhost:8081
來訪問它,也能夠經過其它局域網主機使用IP:8081
方式來訪問它.windows
經過首頁,咱們能夠看到Nexus羅列出來的支持的倉庫類型,很是豐富.centos
注意,你們可能看到我訪問的端口號並非
8081
而是8443,這是由於我設置的http自動跳轉到https,而且指定的https端口爲8443
,這裏之因此要啓用https是由於下面即將講到的docker鏡像上傳須要使用https.這部份內容將在下一節講解.
注意,若是沒有登錄,Nexus並非以顯著的方式提示你登錄,可是非登錄用戶功能受限.要想實現一些管理功能,必須登錄.登錄須要點擊右上角
sign in
按鈕.默認登錄用戶名爲admin
密碼爲admin123
.
上一節咱們講了如何在windows下安裝nexus,本節咱們講解如何來搭建nexus來搭建docker鏡像倉庫.
咱們進入web管理界面,點擊齒輪
圖標,而後點擊Repositories
.以下圖示
注意,以上操做須要登錄.登錄方式爲點擊右上角
sign in
,而後用默認admin
,admin123
登錄.詳細請見上一節內容
而後點擊create repository
按鈕.以下圖操做
頁面出來了很是多的倉庫類型供選擇,因爲咱們要建立的是docker倉庫,這裏選擇的是docker hosted
點擊後出現以下界面
配置上面填寫的內容,填寫完成後咱們點擊左下角create repository
來建立倉庫
因爲咱們使用的是https方式通信,所以咱們須要對nexus服務器進行配置,以支持https.因爲咱們的證書是本身生成的,所以docker客戶端也需添加對本身生成key的信任.
進到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的修改便可.
能夠經過上一節介紹的powershell命令Restart-Service "nexus service
來重啓服務,以使配置生效.
須要注意的是,執行以上命令須要以管理員身份啓動powershell.除了使用命令之外,也能夠進入到服務管理裏面找到名爲
nexus service
的服務,而後手動重啓它.
執行完以上配置之後,咱們再打開瀏覽器訪問https://..localhost:8443
或者http://localhost:8081
注意,重啓服務之後,若是以上內容不能立刻響應,能夠等一會時間再觀察看看.
個人docker服務器安裝在192.168.122.65
上面.下面介紹centos和ubuntu下如何添加證書信任
#生成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系統來講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 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
執行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證書信任