構建Docker映象倉庫的另一選擇:Nexus3(一)
我們知道,構建企業內部私有Docker映象倉庫有很多選擇,比如可以採用原生的Docker
Registry服務,也可以部署更加專業的工具,例如SUSE team的Portus
(https://github.com/SUSE/Portus)或VMware出品的Harbor(https://github.com/vmware/harbor)。我們也就曾對Harbor這樣的產品做過較為詳細的分析(http://mp.weixin.qq.com/s/oQoLgNgnfM8TQHnDDOOIog)。然而像Harbor這樣的明星級映象倉庫管理器元件較為複雜,有沒有比Docker原生的registry功能豐富而又簡單易用的其它選擇呢?
做Java研發專案的同事應該對於搭建Maven私服的工作不陌生,他們會選擇例如Apache Archiva,Jfrog Artifactory或Sonatype Nexus之類的工具。在本篇文章我們要向大家介紹的正是Sonatype Nexus 3這個強大的工具,它不僅僅能夠用於建立Maven私服,還可以用來建立bower、npm、nuget、pypi、rubygems等各種私有倉庫,受到docker技術不斷被追捧的影響,Nexus從3.0版本也開始支援建立Docker映象倉庫了。
讓我們開始一次Nexus3的體驗吧,當然一切的工作我們都會以Docker容器化的方式進行,這也許正是一個追求簡單易用的趨勢吧!
首先讓我們獲得Nexus3的Docker映象,這樣我們即可免除手動安裝除錯的麻煩。
[root@ecs-a30e-0002 ~]# yum install -y git # 必須先安裝git
[root@ecs-a30e-0002 github]# git clone https://github.com/sonatype/docker-nexus3
[root@ecs-a30e-0002 github]# cd docker-nexus3/
[root@ecs-a30e-0002 ~]# java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
[root@ecs-a30e-0002 docker-nexus3]# docker build -t sonatype/nexus:3 .
Sending build context to Docker daemon 206.8kB
Step 1/20 : FROM centos:centos7
---> 5182e96772bf
# 漫長的等待...
Getting information for chef stable for el...
downloading https://omnitruck-direct.chef.io/stable/chef/metadata?v=&p=el&pv=7&m=x86_64
to file /tmp/install.sh.9/metadata.txt
trying curl...
sha1 569b671470a5a9e6ae2a0f759609c631a6a99931
sha256 f7fbef8594cade92bcc7e47cfa075bfec6a10b432ae901ae9e8a3f5c25702e29
url https://packages.chef.io/files/stable/chef/14.4.56/el/7/chef-14.4.56-1.el7.x86_64.rpm
version 14.4.56
downloaded metadata file looks valid...
downloading https://packages.chef.io/files/stable/chef/14.4.56/el/7/chef-14.4.56-1.el7.x86_64.rpm
to file /tmp/install.sh.9/chef-14.4.56-1.el7.x86_64.rpm
trying curl...
Comparing checksum with sha256sum...
# 漫長的等待...
Successfully built 2f3064f8f13e
Successfully tagged sonatype/nexus:3
[root@ecs-a30e-0002 rancher]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
sonatype/nexus 3 687578d612b9 About a minute ago 505MB
sonatype/nexus3 latest 777b20c20405 2 weeks ago 505MB
rancher/server latest 38d4a75fa8f9 5 weeks ago 1.08GB
centos centos7 5182e96772bf 5 weeks ago 200MB
rancher/agent v1.2.11 1cc7591af4f5 7 weeks ago 243MB
rancher/net v0.13.17 f170c38e3763 7 weeks ago 311MB
rancher/dns v0.17.4 678bde0de4d2 2 months ago 249MB
rancher/scheduler v0.8.5 0a2bfb5d8831 2 months ago 248MB
rancher/healthcheck v0.3.8 ce78cf69cc0b 2 months ago 391MB
rancher/metadata v0.10.4 02104eb6e270 2 months ago 251MB
rancher/network-manager v0.7.22 13381626c510 2 months ago 256MB
sonatype/nexus latest 0bf093afada3 2 months ago 467MB
rancher/net holder 665d9f6e8cc1 17 months ago 267MB
注意:上面中的 第一條是我們自己打包的nexus的映象,後面的Tag = 3 可以看出,其他的映象是我從官方拉取的;另外可以參考官方映象製作
建立nexus-data目錄,並且設定使用者 200 ,否則後面的服務啟動不成功(檢視日誌就是提示對目錄無許可權操作)
[[email protected]-a30e-0002 rancher]# pwd
/home/rancher
[[email protected]-a30e-0002 rancher]# ll
total 4
drwxr-xr-x 15 200 root 4096 Sep 13 02:03 nexus-data
通過上面Build Image的過程,我們得到了Nexus3的映象,接下來我們在Rancher平臺進行部署(當然你也可以通過一條docker run指令將容器執行起來,例如docker run –d --name=Nexus3 --restart=always -p 8081:8081 -p 8088:8088 –v /home/rancher/nexus-data:/nexus-data sonatype/nexus:3
)。
選擇Rancher平臺的好處是部署方便,全部基於UI圖形介面完成操作,更進一步我們還可以將這個Nexus3製作成應用商店(Catalog)隨時備用。
第一步 在Rancher平臺新增應用棧
填寫應用棧名稱為Sonatype,描述為Nexus Repository Manager
第二步 在該應用棧下新增Nexus3服務
填寫docker映象為前面步驟生成的sonatype/nexus:3,新增兩個埠對映專案,其中8081是Nexus服務自身的Web管理頁面埠,8088是我們用於Docker映象倉庫服務的埠。(可以根據實際情況只有定義);
設定卷掛載條目,以便將Nexus的配置資訊及資料持久保存於宿主機,這裡Nexus容器內的/nexus目錄被對映到RancherOS宿主機的/home/rancher/nexus-data目錄下。
這裡注意了,目錄/home/rancher/nexus-data需要給使用者200
好了,到這裡就可以訪問 http://ip:8081 了,等待一會兒,nexus初始化完成
一切都是如此的優雅簡潔,不到一分鐘時間,我們的Nexus3服務便已經啟動正常了。點選應用棧裡的8081埠連結,我們便打開了Nexus的登入視窗,輸入預設使用者名稱及密碼admin/admin123:
噢,這裡首先映入眼簾的就是一堆圖示,像APT
、Composer
、Conan
、CPAN
、Docker
、ELPA
、GitLFS
、Helm
、Maven
、npm
、NuGet
、P2
、PyPI
、R
、Raw
、RubyGems
、Yum
。這麼多私服都支援,還有什麼是你不值得高興的呢?
所有安裝參考自這裡,我是邊安裝邊記錄;我的本意其實是僅僅用Nexus搭建一個Maven的私服而已,只不過大神文章太好了,瞭解到Nexus3的強大之處。