一、本地私有倉庫
1、本地私有倉庫簡介
docker本地倉庫,存放鏡像,本地的機(jī)器上傳和下載,pull/push。
使用私有倉庫有許多優(yōu)點(diǎn):
①節(jié)省網(wǎng)絡(luò)帶寬,針對于每個(gè)鏡像不用每個(gè)人都去中央倉庫上面去下載,只需要從私有倉庫中下載即可;
②提供鏡像資源利用,針對于公司內(nèi)部使用的鏡像,推送到本地的私有倉庫中,以供公司內(nèi)部相關(guān)人員使用
2、搭建本地私有倉庫
docker pull registry
#下載registry鏡像
vim /etc/docker/daemon.json
#daemon.json中添加私有鏡像倉庫地址,內(nèi)容如下
{
? "insecure-registries":["192.168.154.10:5000"],
#此行注意填寫自己的ip注意最后有逗號
? "registry-mirrors": ["https://b0u3e8x4.mirror.aliyuncs.com"]
}
systemctl restart docker.service
#重啟docker服務(wù)使本地私有倉庫生效
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
#運(yùn)行registry容器,-v指定數(shù)據(jù)卷掛載目錄,-p指定映射端口號,--restart=always容器重啟策略即開機(jī)自啟此容器
docker tag centos:7 192.168.154.10:5000/centos:v1
#為鏡像重新打私有倉庫標(biāo)簽
docker push 192.168.154.10:5000/centos:v1
#將v1版本上傳到私有倉庫中
curl 192.168.154.10:5000/v2/_catalog
#列出私有倉庫的所有鏡像
curl 192.168.154.10:5000/v2/centos/tags/list
#處理私有倉庫中centos的所有標(biāo)簽鏡像
docker rmi 192.168.154.10:5000/centos:v1
#刪除本地原有v1鏡像
docker pull 192.168.154.10:5000/centos:v1
#測試從私有倉庫下載v1鏡像
3、容器重啟策略介紹
–restart=always重啟策略:
no:默認(rèn)策略,容器退出不重啟
on-failure:容器非正常退出重啟容器
on-failure:3:容器非正常退出最多重啟4次容器
always:退出總是重啟容器
unless-stopped:在容器退出時(shí)總是重啟容器,但是不考慮在Docker守護(hù)進(jìn)程啟動(dòng)時(shí)就已經(jīng)停止了的容器
二、harbor私有倉庫部署與管理
1、什么是harbor
Harbor 是 VMware 公司開源的企業(yè)級 Docker Registry 項(xiàng)目,其目標(biāo)是幫助用戶迅速搭建一個(gè)企業(yè)級的 Docker Registry 服務(wù)。
Harbor以 Docker 公司開源的 Registry 為基礎(chǔ),提供了圖形管理 UI 、基于角色的訪問控制(Role Based AccessControl) 、AD/LDAP 集成、以及審計(jì)日志(Auditlogging) 等企業(yè)用戶需求的功能,同時(shí)還原生支持中文。
Harbor 的每個(gè)組件都是以 Docker 容器的形式構(gòu)建的,使用 docker-compose 來對它進(jìn)行部署。用于部署 Harbor 的 docker-compose 模板位于 harbor/docker-compose.yml。
2、Harbor的特性
①、基于角色控制:用戶和倉庫都是基于項(xiàng)目進(jìn)行組織的,而用戶在項(xiàng)目中可以擁有不同的權(quán)限。
②、基于鏡像的復(fù)制策略:鏡像可以在多個(gè)Harbor實(shí)例之間進(jìn)行復(fù)制(同步)。
③、支持 LDAP/AD:Harbor 可以集成企業(yè)內(nèi)部已有的 AD/LDAP(類似數(shù)據(jù)庫的一張表),用于對已經(jīng)存在的用戶認(rèn)證和管理。
④、鏡像刪除和垃圾回收:鏡像可以被刪除,也可以回收鏡像占用的空間。
⑤、圖形化用戶界面:用戶可以通過瀏覽器來瀏覽,搜索鏡像倉庫以及對項(xiàng)目進(jìn)行管理。
⑥、審計(jì)管理:所有針對鏡像倉庫的操作都可以被記錄追溯,用于審計(jì)管理。
⑦、支持 RESTful API:RESTful API 提供給管理員對于 Harbor 更多的操控, 使得與其它管理軟件集成變得更容易。
⑧、Harbor和docker registry的關(guān)系:Harbor實(shí)質(zhì)上是對docker registry做了封裝,擴(kuò)展了自己的業(yè)務(wù)模板。
3、Harbor的構(gòu)成
Harbor 在架構(gòu)上主要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六個(gè)組件。
①Proxy: 是一個(gè) nginx 的前端代理,Harbor 的 Registry、UI、Token 服務(wù)等組件,都處在 nginx 反向代理后邊。 該代理將來自瀏覽器、docker clients 的請求轉(zhuǎn)發(fā)到后端不同的服務(wù)上。
②Registry: 負(fù)責(zé)儲存 Docker 鏡像,并處理 Docker push/pull 命令。由于要對用戶進(jìn)行訪問控制,即不同用戶對 Docker 鏡像 有不同的讀寫權(quán)限,Registry 會指向一個(gè) Token 服務(wù),強(qiáng)制用戶的每次 Docker pull/push 請求都要攜帶一個(gè)合法的 Token, Registry 會通過公鑰對 Token 進(jìn)行解密驗(yàn)證。
③Core services: Harbor的核心功能,主要提供以下3個(gè)服務(wù): 1)UI(harbor-ui): 提供圖形化界面,幫助用戶管理 Registry 上的鏡像(image), 并對用戶進(jìn)行授權(quán)。 2)WebHook:為了及時(shí)獲取Registry上image 狀態(tài)變化的情況,在Registry 上配置 Webhook,把狀態(tài)變化傳遞給 UI 模塊。 3)Token 服務(wù):負(fù)責(zé)根據(jù)用戶權(quán)限給每個(gè) Docker push/pull 命令簽發(fā) Token。Docker 客戶端向 Registry 服務(wù)發(fā)起的請求, 如果不包含 Token,會被重定向到 Token 服務(wù),獲得 Token 后再重新向 Registry 進(jìn)行請求。
④Database(harbor-db):為core services提供數(shù)據(jù)庫服務(wù),負(fù)責(zé)儲存用戶權(quán)限、審計(jì)日志、Docker 鏡像分組信息等數(shù)據(jù)。
⑤Job services: 主要用于鏡像復(fù)制,本地鏡像可以被同步到遠(yuǎn)程 Harbor 實(shí)例上。
⑥Log collector(harbor-log): 負(fù)責(zé)收集其他組件的日志到一個(gè)地方。
4、harbor部署及配置
環(huán)境準(zhǔn)備
Harbor服務(wù)器 192.168.154.10 docker-ce、docker-compose、harbor-offline-v1.2.2
client服務(wù)器 192.168.154.11 docker-ce
①部署docker-compose
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#下載docker-compose包
chmod +x /usr/local/bin/docker-compose
#添加權(quán)限
docker-compose --version
#查看版本
②部署Harbor服務(wù)
(1)下載或上傳 Harbor 安裝程序
Harbor的壓縮包下載地址:https://github.com/goharbor/harbor/releases
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
(2)修改harbor安裝的配置文件
vim /usr/local/harbor/harbor.cfg
--5行--修改,設(shè)置為Harbor服務(wù)器的IP地址或者域名
hostname = 192.168.154.10
--59行--指定管理員的初始密碼,默認(rèn)的用戶名/密碼是admin/Harbor12345
harbor_admin_password = Harbor12345
③登錄創(chuàng)建項(xiàng)目
1)瀏覽器訪問 http://192.168.154.10 登錄 Harbor WEB UI 界面,默認(rèn)的管理員用戶名和密碼是 admin/Harbor12345
注意:如果重啟服務(wù)出現(xiàn)錯(cuò)誤情況
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
vim /etc/docker/daemon.json
systemctl restart network docker
2)登錄成功后創(chuàng)建一個(gè)新項(xiàng)目
通過 Harbor Web 創(chuàng)建項(xiàng)目
在 Harbor 倉庫中,任何鏡像在被 push 到 regsitry 之前都必須有一個(gè)自己所屬的項(xiàng)目。
單擊“+項(xiàng)目”,填寫項(xiàng)目名稱,項(xiàng)目級別若設(shè)置為"私有",則不勾選。如果設(shè)置為公共倉庫,則所有人對此項(xiàng)目下的鏡像擁有讀權(quán)限,命令行中不需要執(zhí)行"Docker login"即可下載鏡像,鏡像操作與 Docker Hub 一致。
④登錄倉庫并上傳鏡像
#登錄到私有倉庫中
docker login -u admin -p Harbo12345 http://192.168.154.10
#將此鏡像上傳到私有倉庫
docker push 192.168.154.10/library/nginx:v1
docker tag nginx:1.14 192.168.154.10/myproject/nginx:v1
docker push 192.168.154.10/myproject/nginx:v1
5、客戶端測試
①登錄報(bào)錯(cuò)解決
其他客戶端登錄到 Harbor,就會報(bào)錯(cuò)。出現(xiàn)這問題的原因?yàn)镈ocker Registry 交互默認(rèn)使用的是 HTTPS,但是搭建私有鏡像默認(rèn)使用的是 HTTP 服務(wù),所以與私有鏡像交互時(shí)出現(xiàn)錯(cuò)誤。
#在 Docker server 啟動(dòng)的時(shí)候,增加啟動(dòng)參數(shù),默認(rèn)使用 HTTP 訪問。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.154.10 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.154.10
#重啟 Docker,再次登錄
systemctl daemon-reload
systemctl restart docker
開一臺帶有docker服務(wù)的主機(jī) 192.168.154.11
vim /etc/docker/daemon.json
{
"insecure-registries": ["http://192.168.154.10"]
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
添加docker-compose包
mv docker-compose /usr/local/bin
cd /usr/local/bin
chmod +x docker-compose
docker-compose --version
systemctl restart docker
② 客戶端私有倉庫pull鏡像
docker pull 192.168.154.10/library/nginx:v1
docker images
pull不到myproject項(xiàng)目里的鏡像,因?yàn)閙yproject設(shè)置的是私有的,所以要登錄管理員賬戶,才能pull到
創(chuàng)建 Harbor 用戶
創(chuàng)建用戶并分配權(quán)限
在 Web 管理界面中單擊系統(tǒng)管理 -> 用戶管理 -> +用戶,
填寫用戶名為“test”,郵箱為“test@qq.com”,全名為“test”,密碼為“Harbor12345”,注釋為“管理員”(可省略)。
附:用戶創(chuàng)建成功后,單擊左側(cè)“…”按鈕可將上述創(chuàng)建的用戶設(shè)置為管理員角色或進(jìn)行刪除操作,本例不作任何設(shè)置。
角色 權(quán)限說明
訪客 對于指定項(xiàng)目擁有只讀權(quán)限
開發(fā)人員 對于指定項(xiàng)目擁有讀寫權(quán)限,但沒用刪除權(quán)限
維護(hù)人員 對于指定項(xiàng)目擁有讀寫權(quán)限,也能對修改其它配置,比如創(chuàng)建 Webhooks
項(xiàng)目管理員 除了讀寫權(quán)限,同時(shí)擁有用戶管理/鏡像掃描等管理權(quán)限
添加項(xiàng)目成員
單擊項(xiàng)目 -> myproject -> 成員 -> + 成員,填寫上述創(chuàng)建的用戶 test 并分配角色為“開發(fā)人員”。
附:此時(shí)單擊左側(cè)“…”按鈕仍然可對成員角色進(jìn)行變更或者刪除操作
③登錄普通用戶操作私有倉庫
docker login -u test -p Harbor12345 http://192.168.154.10
docker tag nginx:1.14 192.168.154.10/myproject/nginx:v2
docker push 192.168.154.10/myproject/nginx:v2
注意:
docker pull 時(shí),公開項(xiàng)目的鏡像可以被任意用戶拉取,但私有項(xiàng)目的鏡像必須先登錄項(xiàng)目的相關(guān)用戶才能拉取。
docker push 時(shí),必須先登錄相關(guān)項(xiàng)目的用戶,且登錄的用戶是具有上傳權(quán)限的角色才能推送鏡像。
④查看日志
Web 界面日志,操作日志按時(shí)間順序記錄用戶相關(guān)操作
⑤修改 Harbor.cfg 配置文件
要更改 Harbor的配置文件中的可選參數(shù)時(shí),請先停止現(xiàn)有的 Harbor實(shí)例并更新 Harbor.cfg;然后運(yùn)行 prepare 腳本來填充配置; 最后重新創(chuàng)建并啟動(dòng) Harbor 的實(shí)例。
使用 docker-compose 管理 Harbor 時(shí),必須在與 docker-compose.yml 相同的目錄中運(yùn)行。
cd /usr/local/harbor
docker-compose down -v
vim harbor.cfg #只能修改可選參數(shù)
./prepare
docker-compose up -d
//如果有以下報(bào)錯(cuò),需要開啟防火墻 firewalld 服務(wù)解決
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
systemctl restart firewalld.service
docker-compose up -d
⑥移除 Harbor 服務(wù)容器同時(shí)保留鏡像數(shù)據(jù)/數(shù)據(jù)庫,并進(jìn)行遷移
在Harbor服務(wù)器上操作
(1)移除 Harbor 服務(wù)容器文章來源:http://www.zghlxwxcb.cn/news/detail-675191.html
cd /usr/local/harbor
docker-compose down -v
(2)把項(xiàng)目中的鏡像數(shù)據(jù)進(jìn)行打包
持久數(shù)據(jù),如鏡像,數(shù)據(jù)庫等在宿主機(jī)的/data/目錄下,日志在宿主機(jī)的/var/log/Harbor/目錄下文章來源地址http://www.zghlxwxcb.cn/news/detail-675191.html
ls /data/registry/docker/registry/v2/repositories/myproject
cd /data/registry/docker/registry/v2/repositories/myproject
tar zcvf registry.tar.gz ./*
⑦如需重新部署,需要移除 Harbor 服務(wù)容器全部數(shù)據(jù)
cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry
到了這里,關(guān)于Docker本地私有倉庫、harbor私有倉庫部署與管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!