介紹
什么是注冊服務?什么是倉庫?
注冊注冊服務(docker registry)是提供存放倉庫(REPOSITORY)的服務器,docker 官方提供了一個默認的公共服務(docker hub),個人或者企業(yè)可以將自己制作的鏡像上傳到docker hub,也可以上傳到自己搭建的私服。類似于 maven 的官方服務和私服。
倉庫(REPOSITORY)是存放鏡像的命名空間,倉庫里面有多個不同標簽(TAG)的鏡像。類似于 maven 的 artifactId 和 version。
倉庫(REPOSITORY)的名字由兩部分組成:比如 rancher/server,前半部分是多用戶環(huán)境下的用戶名,后半部分是軟件名。如果不需要用戶環(huán)境,前半部分可以丟棄,如果是用私服的話,還需要在倉庫名前面加上地址名(域名),例如:registry.mateng.pers:5000/mateng/kafka 或者 registry.mateng.pers:5000/kafka
鏡像的命名為:<REPOSITORY>:<TAG>。倉庫加標簽即為一個唯一的鏡像。
命名規(guī)則:
- 一般在私服中大多不會使用多用戶環(huán)境,所以不考慮用戶名
- 倉庫名為軟件名
- 標簽為版本號
registry 分類
- 公開服務
- docker hub
- 阿里云鏡像庫
- 網易云鏡像庫
- 私有registry
私有 registry 的搭建
介紹
docker私服是為每個docker主機提供鏡像服務,每個docker主機即為我們的部署程序軟件的機器。
- 每個docker主機可以上傳鏡像到倉庫
- 每個docker主機可以從倉庫中下載鏡像安裝運行到本地
準備
準備兩臺機器,分別都安裝好docker,并啟動成功
- 192.168.137.103 作為 docker 主機
- 192.168.137.104 作為 docker 私服
- 在 192.168.137.103 機器上配置 hosts
192.168.137.104 registry.mateng.pers
下載并安裝
在 docker 私服機器上安裝 docker registry
#下載registry鏡像
docker pull registry
#鏡像啟動一個容器
docker run -d \
-p 5000:5000 \
--name registry \
--restart=always \
-v /opt/docker-software/registry:/var/lib/registry \
registry
此時私服已經搭建完畢
docker 主機配置
1、在所有的 docker 主機上配置/etc/hosts,其中 x.x.x.x為docker倉庫的地址, 通過域名來映射 docker 私服的ip。如:
x.x.x.x registry.mateng.pers
2、在docker主機上配置倉庫的地址
# 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
測試上傳下載
在 docker 主機上測試鏡像的上傳下載
# 從docker hub 下載測試鏡像
docker pull hello-world
# 給本地的hello-world鏡像新打標簽,形成新鏡像
# 域名為倉庫地址
docker tag hello-world registry.mateng.pers:5000/hello-world
# 將新鏡像上傳到本地私服
docker push registry.mateng.pers:5000/hello-world
通過 http 查看私服中的鏡像
curl registry.mateng.pers:5000/v2/_catalog
經驗分享
由于docker倉庫的地址可能會變,所以建議一般在 docker 主機上配置hosts來映射docker-registry的ip
registry UI管理界面
由于我們通過瀏覽器輸入http://私服的ip:5000/v2/_catalog,訪問可以查看到倉庫中有哪些鏡像,但是界面比較粗糙,查看不方便。
為此我們要重新安裝一個倉庫的UI管理界面來更好的使用倉庫。例如hyper/docker-registry-web,konradkleine/docker-registry-frontend。以下只說明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
命令解釋:
- -p 5002:8080 端口映射,使用宿主機的5002端口映射容器的8080端口
- --name 容器名稱
--link 連接到私服,registry為docker私服容器的名字,
必須加 - -e REGISTRY_TRUST_ANY_SSL=true,環(huán)境變量,相信所有的ssl,取消ssl驗證
- -e REGISTRY_NAME, docker倉庫中每個鏡像的前綴,會在docker-registry-web的頁面上顯示(這個域名是私服的域名,端口是私服的端口)
- -e REGISTRY_URL 鏈接私服的url。和 REGISTRY_NAME 類似,這兩個最好寫一致
通過編排方式啟動
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: