Docker 實戰:搭建本地 Registry 私有映象倉庫及批次匯入指令碼

Linux运维技术栈發表於2024-11-27

前言:在我之前的部落格中,我分享了 Harbor 倉庫搭建的詳細操作步驟。然而,在實際的生產環境中,並非每個 Docker 環境都需要部署一個規模龐大的 Harbor 倉庫。有時,一個輕量級的本地 Registry 私有映象倉庫會更為便捷。本文將介紹如何搭建一個本地 Registry 私有映象倉庫,並提供一個自動化指令碼,用於從其他環境批次 “save” 眾多映象包後,一鍵自動匯入到本地 Registry 私有映象倉庫。

第一步:上傳 registry 的映象到 Docker伺服器上

第二步:建立本地映象倉庫儲存卷
命令:mkdir -p /data/registry
命令:docker load -i registry-2.7.1.tar

第三步:執行 registry 服務
命令:docker run -d --name registry -p 5000:5000 -v /data/registry:/var/lib/registry --restart=always registry.szlanyou.com/lke/registry:2.7.1

第四步:修改 docker 配置檔案,增加以下配置
這個命令的配置在各docker節點都需要做
命令:vim /etc/docker/daemon.json
新增:

   {
     "insecure-registries": ["<ip>:5000"]
   }


參考詳細資訊:

{
  "log-opts": {
    "max-size": "5m",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "http://hub-mirror.c.163.com"
  ],
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "insecure-registries": ["ip:5000"]
}

第五步:重啟 docker 服務讓配置生效
這兩個命令各個節點都需要執行

  systemctl daemon-reload
  systemctl restart docker

第六步:上傳本地映象到Docker伺服器上,並執行以下命令,生成imagelist.txt檔案
命令:docker images | grep -v REPOSITORY | awk '{OFS=":";print $1,$2}' > imagelist.txt

第七步:執行image_push.sh自動化指令碼將映象服務批次上傳到本地倉庫

#!/bin/bash

# 設定新映象倉庫的域名和舊域名
new_domain="<ip>:5000"
old_domain="<abc.dfmc.com.cn>"

# 讀取imagelist.txt檔案中的每一行
while IFS= read -r line; do
    # 檢查映象是否存在
    if [[ $(docker images -q "$line") ]]; then
        # 替換舊域名
        new_image=$(echo "$line" | sed "s|$old_domain|$new_domain|")
        
        # 列印資訊,確認哪些映象將被打包
        echo "Retagging $line -> $new_image"
        
        # 重新標記映象
        docker tag "$line" "$new_image"
        
        # 推送映象到新的倉庫
        echo "Pushing $new_image"
        docker push "$new_image"
    else
        echo "Image not found: $line"
    fi
done < imagelist.txt

注意:以上替換為具體倉庫所在伺服器ip,<abc.dfmc.com.cn>替換為舊映象地址域名
上儲存後執行 sh image_push.sh 命令,等待映象上傳到本地倉庫後即可

相關文章