C.7 docker registry

介紹

什么是注冊服務?什么是倉庫?

注冊注冊服務(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: 

參考文件

https://docs.docker.com/registry/deploying/

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容