harbor封装与上传脚本
方法一:直接封裝進 Docker 鏡像(最推薦)
這是 Docker 的標準做法。你將腳本放入
Dockerfile 中,這樣鏡像在哪裡,腳本就在哪裡。- 編寫 Dockerfile:
FROM redis-custom:arm64 # 或你的基礎鏡像 # 將本地的 script.sh 複製到鏡像內的 /usr/local/bin/ COPY script.sh /usr/local/bin/script.sh # 給予執行權限 RUN chmod +x /usr/local/bin/script.sh - 構建並推送:
這樣用戶執行docker pull後,進入容器就能看到這個腳本。
方法二:利用 Harbor 的 Helm Chart 倉庫(適合部署腳本)
如果你的
.sh 腳本是用來「部署」這個鏡像的(例如安裝環境的初始化腳本),你可以將它打包進 Helm Chart。- Harbor 支持存放 Helm Charts。
- 你可以將腳本放在 Chart 的
templates或自定義目錄中。 - 當別人在 Harbor 下載這個 Chart 時,腳本會跟著設定檔一起被下載。
方法三:利用 OCI Artifacts(將腳本當作「物件」存放)
現代版本的 Harbor 支持 OCI Artifacts。這意味著 Harbor 不只能存鏡像,還能存任何二進位檔案。
- 你可以使用 ORAS 這類工具,像 push 鏡像一樣把
.sh腳本推送到 Harbor。bashoras push 192.168.100.226:5080/wisdom/scripts:v1.0 script.sh - 在 Harbor 介面中,你會看到一個類型不是 Image 而是 Artifact 的標籤。
總結建議:
- 如果腳本是運行容器時需要用到的(如啟動腳本),請用 方法一(封裝進鏡像)。
- 如果腳本是用來管理或安裝的(如
install_redis.sh),請用 方法三 或直接在 Git 倉庫管理。
yxbinghe
為了啟動服務與初始化數據,最正宗且最推薦的做法是將腳本直接封裝進 Docker 鏡像中。這樣做的好處是:當你執行 docker pull 時,腳本就已經在鏡像內部了,不需要額外下載或手動執行。以下是針對你的 Redis 鏡像的具體操作建議:1. 修改 Dockerfile (最佳實踐)將 .sh 腳本放入鏡像,並利用 Docker 的 ENTRYPOINT 或 CMD 功能讓它在容器啟動時自動執行。dockerfile# 假設你的基礎鏡像
FROM 192.168.100.226:5080/wisdom/redis-custom:amd64
# 將啟動腳本複製到鏡像內
COPY start-and-init.sh /usr/local/bin/start-and-init.sh
# 賦予執行權限
RUN chmod +x /usr/local/bin/start-and-init.sh
# 啟動容器時執行該腳本
ENTRYPOINT [“/usr/local/bin/start-and-init.sh”]
請謹慎使用程式碼。2. 啟動腳本 start-and-init.sh 的範例因為 Redis 啟動後會佔據前景,你的腳本需要先啟動 Redis,再執行初始化,或者先執行初始化再啟動 Redis。bash#!/bin/bash
# 1. 後台啟動 Redis (如果是為了初始化數據)
redis-server –daemonize yes
# 2. 等待 Redis 啟動完成
until redis-cli ping | grep -q PONG; do
echo “Waiting for Redis to start…”
sleep 1
done
# 3. 執行初始化數據 (例如匯入數據)
echo “Initializing data…”
redis-cli set mykey “myvalue”
# 4. 關閉後台進程,改以前景啟動 (保持容器運行)
redis-cli shutdown
exec redis-server
請謹慎使用程式碼。3. 推送到 Harbor重新 docker build 該鏡像。按照你之前的步驟,分別推送到 arm64 和 amd64。最後重新建立 Manifest (v1.0)。