1、安裝Nexus3docker
Nexus3是Sonatype提供的倉庫管理平臺,Nuexus Repository OSS3可以支持Maven、npm、Docker、YUM、Helm等格式數據的存儲和發佈;而且可以與Jekins、SonaQube和Eclipse等工具進行集成。Nexus3支持做爲宿主和代理存儲庫的Docker存儲庫,能夠直接將這些存儲庫暴露給客戶端工具;也能夠以存儲庫組的方式暴露給客戶端工具,存儲庫組是合併了多個存儲庫的內容的存儲庫,可以經過一個URL將多個存儲庫暴露給客戶端工具,從而便於用戶的使用。經過nexus3自建可以有效減小訪問獲取鏡像的時間和對帶寬使用,並可以經過自有的鏡像倉庫共享企業本身的鏡像。在本文中,採用Docker模式安裝部署Nexus3。npm
首先,建立一個目錄,用於爲Nexus3提供持久化存儲。json
# 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鏡像所使用。vim
# docker run -d -p 8081:8081 -p 8082:8082 --restart=always --name nexus -v /usr/local/docker/data/nexus-data:/nexus-data sonatype/nexus3
2、構建私有鏡像倉庫瀏覽器
在nexus部署成功後,在瀏覽器中經過http://{host_ip}:8081地址訪問nexus應用,默認用戶名密碼爲admin/admin123。安全
1)經過管理員賬戶登陸nexus,並進入建立爲docker的鏡像倉庫的主頁:服務器
2)在建立鏡像倉庫的頁面中,設置鏡像倉庫的相關信息,包括名稱、HTTP端口、是否容許匿名拉取鏡像等信息。這裏須要注意的是,此處的HTTP端口(此處的值爲8082)很重要,後續拉取和推送進行是使用此端口進行的,而不是nexus自己對外暴露的端口。另外,若是容許設置經過匿名的方式拉取鏡像。工具
這須要在Realms主頁激活Docker Bearer Token Reamlm,以下圖所示:spa
並對匿名方式進行設置,容許經過匿名方式訪問服務器,以下圖進行設置:代理
3)在客戶端的/etc/docker/daemon.json文件中添加下面的內容:
在完成私有鏡像倉庫的設置後,因爲使用的是HTTP協議,所以須要在客戶端對docker進行配置。經過編譯工具打開daemon.json:
1
2
3
4
5
6
|
# vim /etc/docker/daemon.json
在文件中添加以下的內容,告訴客戶端私有鏡像倉庫是一個安全的倉庫:
{
"insecure-registries"
:[
"192.168.88.128:8082"
]}
# systemctl daemon-reload
# systemctl restart docker
|
3、基本操做
1)登陸認證
在經過nexus完成私有鏡像倉庫的構建後,首先須要進行登陸認證才能進行後續的操做,私有鏡像倉庫登陸認證的語法和格式:docker login <nexus-hostname>:<repository-port>。假設上述的nexus部署在IP地址爲192.168.88.128主機上,私有鏡像的端口爲8082,則經過執行以下的命令登陸私有鏡像倉庫:
1
|
$ 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)中的鏡像,標識的執行命令以下:
1
|
$ docker tag hello-world 192.168.88.128:8082/hello-world
|
一旦鏡像標識完成後,就能夠經過的docker push命令將鏡像推送到私有倉庫中。推送鏡像到私有鏡像倉庫的語法和格式爲docker push <nexus-hostname>:<repository-port>/<image>:<tag>,經過下面的命令,將上述打完標籤的鏡像上傳至私有鏡像倉庫:
1
|
$ docker push 192.168.88.128:8082/hello-world:latest
|
3)拉取鏡像
在客戶端能夠經過手動拉取鏡像,拉取的語法和格式:docker pull <nexus-hostname>:<repository-port>/<image>:<tag>。假設從本文構建的私有鏡像倉庫中拉取hello-world,執行命令以下所示:
1
|
$ docker pull 192.168.88.128:8082/hello-world
|