介紹
什么是注冊(cè)服務(wù)?什么是倉(cāng)庫(kù)鹃祖?
注冊(cè)注冊(cè)服務(wù)(docker registry)是提供存放倉(cāng)庫(kù)(REPOSITORY)的服務(wù)器,docker 官方提供了一個(gè)默認(rèn)的公共服務(wù)(docker hub)恬口,個(gè)人或者企業(yè)可以將自己制作的鏡像上傳到docker hub,也可以上傳到自己搭建的私服楷兽。類(lèi)似于 maven 的官方服務(wù)和私服。
倉(cāng)庫(kù)(REPOSITORY)是存放鏡像的命名空間芯杀,倉(cāng)庫(kù)里面有多個(gè)不同標(biāo)簽(TAG)的鏡像。類(lèi)似于 maven 的 artifactId 和 version揭厚。
倉(cāng)庫(kù)(REPOSITORY)的名字由兩部分組成:比如 rancher/server,前半部分是多用戶(hù)環(huán)境下的用戶(hù)名筛圆,后半部分是軟件名裂明。如果不需要用戶(hù)環(huán)境,前半部分可以丟棄太援,如果是用私服的話(huà)闽晦,還需要在倉(cāng)庫(kù)名前面加上地址名(域名),例如:registry.mateng.pers:5000/mateng/kafka 或者 registry.mateng.pers:5000/kafka
鏡像的命名為:<REPOSITORY>:<TAG>提岔。倉(cāng)庫(kù)加標(biāo)簽即為一個(gè)唯一的鏡像。
命名規(guī)則:
- 一般在私服中大多不會(huì)使用多用戶(hù)環(huán)境碱蒙,所以不考慮用戶(hù)名
- 倉(cāng)庫(kù)名為軟件名
- 標(biāo)簽為版本號(hào)
registry 分類(lèi)
- 公開(kāi)服務(wù)
- docker hub
- 阿里云鏡像庫(kù)
- 網(wǎng)易云鏡像庫(kù)
- 私有registry
私有 registry 的搭建
介紹
docker私服是為每個(gè)docker主機(jī)提供鏡像服務(wù),每個(gè)docker主機(jī)即為我們的部署程序軟件的機(jī)器赛惩。
- 每個(gè)docker主機(jī)可以上傳鏡像到倉(cāng)庫(kù)
- 每個(gè)docker主機(jī)可以從倉(cāng)庫(kù)中下載鏡像安裝運(yùn)行到本地
準(zhǔn)備
準(zhǔn)備兩臺(tái)機(jī)器,分別都安裝好docker喷兼,并啟動(dòng)成功
- 192.168.137.103 作為 docker 主機(jī)
- 192.168.137.104 作為 docker 私服
- 在 192.168.137.103 機(jī)器上配置 hosts
192.168.137.104 registry.mateng.pers
下載并安裝
在 docker 私服機(jī)器上安裝 docker registry
#下載registry鏡像
docker pull registry
#鏡像啟動(dòng)一個(gè)容器
docker run -d \
-p 5000:5000 \
--name registry \
--restart=always \
-v /opt/docker-software/registry:/var/lib/registry \
registry
此時(shí)私服已經(jīng)搭建完畢
docker 主機(jī)配置
1、在所有的 docker 主機(jī)上配置/etc/hosts褒搔,其中 x.x.x.x為docker倉(cāng)庫(kù)的地址喷面, 通過(guò)域名來(lái)映射 docker 私服的ip。如:
x.x.x.x registry.mateng.pers
2惧辈、在docker主機(jī)上配置倉(cāng)庫(kù)的地址
# centos7的配置方法
vim /lib/systemd/system/docker.service
# 修改配置文件的ExecStart參數(shù)
ExecStart=/usr/bin/dockerd \
--insecure-registry=registry.mateng.pers:5000
# 重啟Docker
systemctl daemon-reload
systemctl restart docker.service
測(cè)試上傳下載
在 docker 主機(jī)上測(cè)試鏡像的上傳下載
# 從docker hub 下載測(cè)試鏡像
docker pull hello-world
# 給本地的hello-world鏡像新打標(biāo)簽,形成新鏡像
# 域名為倉(cāng)庫(kù)地址
docker tag hello-world registry.mateng.pers:5000/hello-world
# 將新鏡像上傳到本地私服
docker push registry.mateng.pers:5000/hello-world
通過(guò) http 查看私服中的鏡像
curl registry.mateng.pers:5000/v2/_catalog
經(jīng)驗(yàn)分享
由于docker倉(cāng)庫(kù)的地址可能會(huì)變盒齿,所以建議一般在 docker 主機(jī)上配置hosts來(lái)映射docker-registry的ip
registry UI管理界面
由于我們通過(guò)瀏覽器輸入http://私服的ip:5000/v2/_catalog,訪(fǎng)問(wèn)可以查看到倉(cāng)庫(kù)中有哪些鏡像边翁,但是界面比較粗糙,查看不方便符匾。
為此我們要重新安裝一個(gè)倉(cāng)庫(kù)的UI管理界面來(lái)更好的使用倉(cāng)庫(kù)。例如hyper/docker-registry-web瘩例,konradkleine/docker-registry-frontend。以下只說(shuō)明hyper/docker-registry-web的安裝垛贤。
registry-web 安裝
docker run -d \
-p 5002:8080 \
--name registry-web \
--link registry \
-v /opt/docker-software/registry/web:/data \
-e REGISTRY_URL=http://registry:5000/v2 \
-e REGISTRY_TRUST_ANY_SSL=true \
-e REGISTRY_NAME=registry.mateng.pers:5000 \
hyper/docker-registry-web
命令解釋?zhuān)?/p>
- -p 5002:8080 端口映射,使用宿主機(jī)的5002端口映射容器的8080端口
- --name 容器名稱(chēng)
--link 連接到私服聘惦,registry為docker私服容器的名字,
必須加 - -e REGISTRY_TRUST_ANY_SSL=true善绎,環(huán)境變量,相信所有的ssl涂邀,取消ssl驗(yàn)證
- -e REGISTRY_NAME, docker倉(cāng)庫(kù)中每個(gè)鏡像的前綴,會(huì)在docker-registry-web的頁(yè)面上顯示(這個(gè)域名是私服的域名比勉,端口是私服的端口)
- -e REGISTRY_URL 鏈接私服的url驹止。和 REGISTRY_NAME 類(lèi)似浩聋,這兩個(gè)最好寫(xiě)一致
通過(guò)編排方式啟動(dòng)
vim stack.yml
version: '3'
services:
registry:
image: registry:latest
ports:
- 5000:5000
volumes:
- /opt/docker-software/registry:/var/lib/registry
networks:
- net
deploy:
replicas: 1
restart_policy:
condition: on-failure
placement:
constraints:
- node.role == manager
web:
image: hyper/docker-registry-web:latest
ports:
- 5002:8080
volumes:
- /opt/docker-software/registry/web:/data
depends_on:
- registry
networks:
- net
environment:
REGISTRY_HOST: registry
REGISTRY_URL: http://registry:5000/v2
REGISTRY_NAME: registry.mateng.pers:5000
deploy:
replicas: 1
restart_policy:
condition: on-failure
placement:
constraints:
- node.role == manager
networks:
net: