1. 程式人生 > >構建Docker映象倉庫的另一選擇:Nexus3(一)

構建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:
這裡寫圖片描述
噢,這裡首先映入眼簾的就是一堆圖示,像APTComposerConanCPANDockerELPAGitLFSHelmMavennpmNuGetP2PyPIRRawRubyGemsYum。這麼多私服都支援,還有什麼是你不值得高興的呢?


所有安裝參考自這裡,我是邊安裝邊記錄;我的本意其實是僅僅用Nexus搭建一個Maven的私服而已,只不過大神文章太好了,瞭解到Nexus3的強大之處。