1. 程式人生 > >使用Nexus3構建Docker私有鏡像倉庫

使用Nexus3構建Docker私有鏡像倉庫

nbsp 有效 toolbar 處的 osi .com 名稱 img nexus

一、安裝Nexus3

Nexus3是Sonatype提供的倉庫管理平臺,Nuexus Repository OSS3能夠支持Maven、npm、Docker、YUM、Helm等格式數據的存儲和發布;並且能夠與Jekins、SonaQube和Eclipse等工具進行集成。Nexus3支持作為宿主和代理存儲庫的Docker存儲庫,可以直接將這些存儲庫暴露給客戶端工具;也可以以存儲庫組的方式暴露給客戶端工具,存儲庫組是合並了多個存儲庫的內容的存儲庫,能夠通過一個URL將多個存儲庫暴露給客戶端工具,從而便於用戶的使用。通過nexus3自建能夠有效減少訪問獲取鏡像的時間和對帶寬使用,並能夠通過自有的鏡像倉庫共享企業自己的鏡像。在本文中,采用Docker模式安裝部署Nexus3。

首先,創建一個目錄,用於為Nexus3提供持久化存儲。

# mkdir -p /usr/local/docker/data/nexus-data && chown -R 200 /usr/local/docker/data/nexus-data

接著,就可以通過sonatype/nexus3鏡像啟動nexus3的容器化應用了。通過如下命令啟動的nexus將對外暴露8081端口,並容器的持久化數據通過會存儲在上述創建的空間中。在容器運行後,用戶可以通過http://{host_ip}:8081訪問nexus3應用,其中{host_ip}為容器所部署的宿主機的IP地址。8082端口是暴露出來讓docker客戶端訪問私有鏡像倉庫,上傳docker鏡像所使用。

# docker run -d -p 8081:8081 -p 8082:8082 --restart=always --name nexus -v /usr/local/docker/data/nexus-data:/nexus-data sonatype/nexus3

技術分享圖片

二、構建私有鏡像倉庫

在nexus部署成功後,在瀏覽器中通過http://{host_ip}:8081地址訪問nexus應用,默認用戶名密碼為admin/admin123。

技術分享圖片

1)通過管理員帳戶登錄nexus,並進入創建為docker的鏡像倉庫的主頁:

技術分享圖片

技術分享圖片

2)在創建鏡像倉庫的頁面中,設置鏡像倉庫的相關信息,包括名稱、HTTP端口、是否允許匿名拉取鏡像等信息。這裏需要註意的是,此處的HTTP端口(此處的值為8082)很重要,後續拉取和推送進行是使用此端口進行的,而不是nexus本身對外暴露的端口。另外,如果允許設置通過匿名的方式拉取鏡像。

這需要在Realms主頁激活Docker Bearer Token Reamlm,如下圖所示:

技術分享圖片

並對匿名方式進行設置,允許通過匿名方式訪問服務器,如下圖進行設置:

技術分享圖片

3)在客戶端的/etc/docker/daemon.json文件中添加下面的內容:

在完成私有鏡像倉庫的設置後,由於使用的是HTTP協議,因此需要在客戶端對docker進行配置。通過編譯工具打開daemon.json:

# vim /etc/docker/daemon.json
在文件中添加如下的內容,告訴客戶端私有鏡像倉庫是一個安全的倉庫:
{"insecure-registries":["192.168.88.128:8082"]}

# systemctl daemon-reload
# systemctl restart docker


三、基本操作

1)登錄認證

在通過nexus完成私有鏡像倉庫的構建後,首先需要進行登錄認證才能進行後續的操作,私有鏡像倉庫登錄認證的語法和格式:docker login <nexus-hostname>:<repository-port>。假設上述的nexus部署在IP地址為192.168.88.128主機上,私有鏡像的端口為8082,則通過執行如下的命令登錄私有鏡像倉庫:

$ docker login 192.168.88.128:8082

技術分享圖片

登錄時,需要提供用戶名和密碼。認證的信息會被保存在~/.docker/config.json文件,在後續與私有鏡像倉庫交互時就可以被重用,而不需要每次都進行登錄認證。

2)推送鏡像

要共享一個鏡像,可以通過將其發布到托管存儲庫,然後其它人員就可以通過存儲庫獲取自己需要的鏡像。在將鏡像推送到存儲庫之前,需要對鏡像進行標記。當標記圖像時,可以使用鏡像標識符(imageId)或者鏡像名稱(imageName)。標識鏡像的語法和格式:docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag>。假設這裏將hello-world鏡像標識為私有鏡像倉庫(192.168.88.128:8082)中的鏡像,標識的執行命令如下:

$ docker tag hello-world 192.168.88.128:8082/hello-world

一旦鏡像標識完成後,就可以通過的docker push命令將鏡像推送到私有倉庫中。推送鏡像到私有鏡像倉庫的語法和格式為docker push <nexus-hostname>:<repository-port>/<image>:<tag>,通過下面的命令,將上述打完標簽的鏡像上傳至私有鏡像倉庫:

$ docker push 192.168.88.128:8082/hello-world:latest

技術分享圖片

3)拉取鏡像

在客戶端可以通過手動拉取鏡像,拉取的語法和格式:docker pull <nexus-hostname>:<repository-port>/<image>:<tag>。假設從本文構建的私有鏡像倉庫中拉取hello-world,執行命令如下所示:

$ docker pull 192.168.88.128:8082/hello-world

技術分享圖片

使用Nexus3構建Docker私有鏡像倉庫