1.安裝
鏡像倉(cāng)庫(kù)有多種,目前常用的是Harbo或Nexus乃沙,由于Nexus支持范圍更廣熬甫,更適合項(xiàng)目開(kāi)發(fā)團(tuán)隊(duì)使用,我們將選擇使用Nexus建立內(nèi)部倉(cāng)庫(kù)试读。
由于我們前面安裝了K8S環(huán)境杠纵,Nexus倉(cāng)庫(kù)我們可以使用K8S來(lái)安裝及管理,也可以直接使用Docker安裝钩骇,通常建議倉(cāng)庫(kù)獨(dú)立于K8S環(huán)境安裝比藻,我們采用Docker直接部署。
首先在服務(wù)器上創(chuàng)建目錄/data/nexus/nexus-data倘屹,用于存儲(chǔ)鏡像數(shù)據(jù)银亲。
chmod 777 /data/nexus/nexus-data #設(shè)置目錄權(quán)限
docker search nexus #查詢鏡像
docker run -d --name nexus3 \
--restart=always \
-p 8081:8081 \
-p 8082:8082 \
-p 8083:8083 \
-p 8084:8084 \
-p 8085:8085 \
-v /data/nexus/nexus-data:/nexus-data \
sonatype/nexus3
2.配置
安裝完成后,我們使用http://ip:8081訪問(wèn)nexus纽匙。
點(diǎn)擊右上角登錄务蝠,提示password需要去/nexus-data/admin.password文件中找
使用下面的命令查看初始密碼,注意路徑烛缔,也可以使用docker exec -it 進(jìn)容器中查看
cat /data/nexus/nexus-data/admin.password #就可以看到初始密碼了
使用該密碼登錄后馏段,我們開(kāi)始初始化倉(cāng)庫(kù)
新建Docker Host倉(cāng)庫(kù)
類(lèi)型選擇docker(hosted)轩拨,端口8083
新建Docker Proxy倉(cāng)庫(kù),端口8084
docker proxy是指代理遠(yuǎn)程的倉(cāng)庫(kù)院喜,通常是代理公開(kāi)鏡像倉(cāng)庫(kù)亡蓉,可以建多個(gè)源,比如163/阿里够坐,相當(dāng)于建立一個(gè)傳輸通道寸宵。
新建Docker Group倉(cāng)庫(kù),端口8082
Docker Group是一個(gè)倉(cāng)庫(kù)聚合元咙,我們對(duì)外暴露倉(cāng)庫(kù)通常暴露該聚合倉(cāng)庫(kù)地址梯影。
聚合模式通常是本地Host倉(cāng)庫(kù)+Proxy遠(yuǎn)程倉(cāng)庫(kù),如下庶香,我們聚合了163和我們本地的倉(cāng)庫(kù)(優(yōu)先本地)甲棍,可以通過(guò)上下箭頭調(diào)整優(yōu)先級(jí),上面的優(yōu)先級(jí)高赶掖。
創(chuàng)建完成后感猛,我們可以mydocker-group的地址為
http://ip:8081/repository/docker-group
Realms設(shè)置
3.使用
修改docker的daemon倉(cāng)庫(kù)地址
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://ip:8081"],
"insecure-registries": ["ip:8081"],
"graph": "/data/docker/path"
}
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
重啟Docker
systemctl daemon-reload
systemctl restart docker
測(cè)試是否可用
[root@k8s-node2 nexus-data]# docker login http://192.168.0.230:8082
Username: admin
Password:
Error response from daemon: Get https://192.168.0.230:8082/v2/: http: server gave HTTP response to HTTPS client
這個(gè)錯(cuò)誤是因?yàn)槲覀兪褂玫氖莌ttp協(xié)議,而docker獲取鏡像默認(rèn)走的是https奢赂,如果需要走h(yuǎn)ttp陪白,則需要加入到例外清單中,方法如下:
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.0.230:8082","192.168.0.230:8083","192.168.0.230:8084"],
"registry-mirrors": ["http://192.168.0.230:8082"],
"graph": "/data/docker/path"
}
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
重啟容器:
重啟
[root@k8s-node2 ~]# systemctl daemon-reload
[root@k8s-node2 ~]# sudo service docker restart
再次嘗試登錄
docker login http://192.168.0.230:8082
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
登錄成功
push一個(gè)鏡像測(cè)試下
#先打標(biāo)簽膳灶,nginx我們之前已經(jīng)下載過(guò)咱士,如果沒(méi)有,則docker pull nginx下載
docker tag nginx 192.168.0.230:8082/nginx01:v1
#推送到鏡像倉(cāng)庫(kù)
docker push 192.168.0.230:8082/nginx01:v1
返回404錯(cuò)誤: error parsing HTTP 404 response body: invalid character
原因是我們使用8082是docker-group的端口
我們改為8083端口(docker-host)重新嘗試
#先登錄下8083端口
[root@k8s-node2 nexus-data]# docker login http://192.168.0.230:8083
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
#重新打一個(gè)標(biāo)簽
[root@k8s-node2 nexus-data]# docker tag nginx 192.168.0.230:8083/nginx01:v1
#推送
[root@k8s-node2 nexus-data]# docker push 192.168.0.230:8083/nginx01:v1
The push refers to repository [192.168.0.230:8083/nginx01]
55a77731ed26: Pushed
71f2244bc14d: Pushed
f2cb0ecef392: Pushed
v1: digest: sha256:3936fb3946790d711a68c58be93628e43cbca72439079e16d154b5db216b58da size: 948
[root@k8s-node2 nexus-data]#
提示上傳成功轧钓,如下圖所示序厉,我們已經(jīng)可以在我們自己的倉(cāng)庫(kù)中看到該鏡像。
使用我們就可以直接內(nèi)網(wǎng)pull:
docker pull 192.168.0.230:8083/nginx01:v1
v1: Pulling from nginx01
68ced04f60ab: Pull complete
28252775b295: Pull complete
a616aa3b0bf2: Pull complete
Digest: sha256:3936fb3946790d711a68c58be93628e43cbca72439079e16d154b5db216b58da
Status: Downloaded newer image for 192.168.0.230:8083/nginx01:v1
4.其他
Nexus支持的源很多毕箍,YUM源弛房,Maven源,Nuget源均可以配置出來(lái)而柑;另外可以配合Nginx或Kong映射出不同的域名:docker.xxxx.com/maven.xxx.com/nuget.xxx.com;nexus.xxx.com