docker安裝nexus3并創(chuàng)建三種私庫
一、nexus3安裝
1.下載nexus3的鏡像
$ docker pull sonatype/nexus3
2.使用鏡像啟動(dòng)一個(gè)容器
$ docker run -d -p 8081:8081 -p 8082:8082 -p 8083:8083 --name nexus3 -v /home/nexus/nexus-data:/nexus-data --restart=always sonatype/nexus3
- 8082端口是用于host鏡像倉庫的服務(wù)端口
- 8083端口用戶group鏡像倉庫的服務(wù)端口
- 8081 端口是nexus的服務(wù)端口
- --name nexus3
- -v /home/nexus/nexus-data:/nexus-data 將容器內(nèi)nexus-data數(shù)據(jù)文件夾掛載到宿主機(jī)/home/nexus/nexus-data目錄下
- sonatype/nexus3 鏡像名,如果后面不加版本號,則默認(rèn)啟動(dòng)latest版本
這里單獨(dú)說一下 --restart=always:
意思是不管退出狀態(tài)碼是什么始終重啟容器。當(dāng)指定always時(shí),docker daemon將無限次數(shù)地重啟容器。容器也會(huì)在daemon啟動(dòng)時(shí)嘗試重啟,不管容器當(dāng)時(shí)的狀態(tài)如何。
- no :容器退出時(shí)不要自動(dòng)重啟。這個(gè)是默認(rèn)值。
- on-failure[:max-retries] : 只在容器以非0狀態(tài)碼退出時(shí)重啟??蛇x的,可以退出docker daemon嘗試重啟容器的次數(shù)。
- always :不管退出狀態(tài)碼是什么始終重啟容器。當(dāng)指定always時(shí),docker daemon將無限次數(shù)地重啟容器。容器也會(huì)在daemon啟動(dòng)時(shí)嘗試重啟,不管容器當(dāng)時(shí)的狀態(tài)如何。
- unless-stopped :不管退出狀態(tài)碼是什么始終重啟容器,不過當(dāng)daemon啟動(dòng)時(shí),如果容器之前已經(jīng)為停止?fàn)顟B(tài),不要嘗試啟動(dòng)它。
啟動(dòng)之后我們就可以通過http://服務(wù)器IP:8081訪問。默認(rèn)賬號密碼為admin/admin123
二、Nexus3創(chuàng)建Docker私有倉庫
1.通過瀏覽器訪問Nexus
http://服務(wù)器IP:8081
2.登錄nexus
點(diǎn)擊右上角進(jìn)行登錄,通過初始用戶名和密碼進(jìn)行登錄(admin/admin123):

3.Create repository
點(diǎn)擊設(shè)置界面,選擇Repositories,點(diǎn)擊Create repository,如下圖所示:

4.選擇倉庫類型
這里Docker有三種類型,分別是group、hosted、proxy。選擇docker(hosted),如下圖:

注:Docker鏡像倉庫類型含義解釋如下:
- hosted : 本地存儲(chǔ),即同docker官方倉庫一樣提供本地私服功能
- proxy : 提供代理其他倉庫的類型,如docker中央倉庫
- group : 組類型,實(shí)質(zhì)作用是組合多個(gè)倉庫為一個(gè)地址
4.1 創(chuàng)建host倉庫
指定docker倉庫的名稱、指定一個(gè)端口用來通過http的方式進(jìn)行訪問倉庫、勾選是否支持docker API V1,然后create repository;

4.2 創(chuàng)建proxy倉庫

4.3 創(chuàng)建group倉庫

5.docker服務(wù)的設(shè)定
Docker的私庫可以使用http或者h(yuǎn)ttps,Nexus 3都予以支持,本文的方式采用http方式,因此需要設(shè)定docker,在docker啟動(dòng)前設(shè)定如下信息是需要的
編輯/etc/docker/daemon.json;增加如下內(nèi)容,當(dāng)然也可通過啟動(dòng)參數(shù)增加
$ vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries":["192.168.80.129:8082","192.168.80.129:8083"],
"disable-legacy-registry": true
}
6.重啟docker進(jìn)程
# 使daemon生效
$ systemctl daemon-reload
# 重啟docker
$ systemctl restart docker
7.驗(yàn)證登錄
要使用私庫進(jìn)行上傳下載需要進(jìn)行登錄連接到Nexus
$ docker login http://192.168.1.111:8082
$ docker login http://192.168.1.111:8083

8.docker-proxy驗(yàn)證
$ docker pull 192.168.1.111:8083/redis
Using default tag: latest
latest: Pulling from redis
b0568b191983: Pulling fs layer
6637dc5b29fe: Download complete
7b4314315f15: Pulling fs layer
2fd86759b5ff: Waiting
0f04862b5a3b: Waiting
2db0056aa977: Waiting
查了一下nexus的一些問題,發(fā)現(xiàn)有不少都是跟blob相關(guān),看起來相關(guān)的小的問題還有一些在不斷的收拾中,但是不影響結(jié)果。 確認(rèn)proxy倉庫,發(fā)現(xiàn)pull的alpine的3.5版本已然在proxy倉庫中保存完畢,所以上面的unknown blob也確實(shí)沒有影響結(jié)果。

9 docker-hosted驗(yàn)證
查看鏡像
$ docker images

tag鏡像
$ docker tag hello-world:latest 192.168.1.111:8082/docker:latest
push鏡像
$ docker push 192.168.1.111:8082/docker:latest
