簡體   English   中英

在 docker 容器中克隆私有 git repo

[英]Cloning private git repo in the docker container

我有一個項目(用 ruby​​ 編寫),我想在 docker 映像中運行它。 項目源代碼存儲在私有 git 存儲庫中,鏡像由 Dockerfile 照常創建。 項目很大,所以 git clone 需要相對較長的時間。

問題是,我不確定如何(何時/何地)將 git repo 正確克隆到 docker 映像。 我可以將 git 存儲庫克隆到臨時目錄並通過 Dockerfile 中的 COPY 命令復制源代碼。 我不喜歡這樣做,因為我必須在臨時目錄中維護第二個克隆。

或者,我可以在 docker 鏡像中克隆 repo。 問題是我無法合理地保留在圖像中的 ssh 密鑰。 我只能將“我自己的”密鑰添加到允許訪問所有內容的 git 服務器。

所以,我創建了一個這樣的腳本:

UUID=`uuid`    
docker run \
    -v $HOME/.ssh:/home/user/.ssh:ro\
    --name=$UUID \
    -it $1 /scripts/git-clone-update.sh
docker commit $UUID $1
docker rm $UUI

git-clone-update.sh 如果項目不存在,則克隆該項目,如果存在則僅進行更新。 為此,密鑰已安裝到 .ssh 中。 它工作得很好。 只需調用傳遞圖像名稱作為參數的腳本,我就可以輕松更新圖像中的代碼。 唯一的問題是 Config.Cmd,它總是更改為 /scripts/git-clone-update.sh。

知道如何保留原始的 Config.Cmd 嗎? 將私有 ropo 克隆到 docker 映像中的最佳實踐是什么?

謝謝

正如您所發現的,將您的私人 ssh 密鑰保存在 docker 映像中對於安全性來說並不是很好。 我已經看到了兩種方法:

  1. 創建一個新的只讀帳戶並將其密鑰保存在 docker 映像中。 您可以對此帳戶施加的限制越多,安全性就越好,但您仍然在實際源代碼之上打包了一個秘密。

    此外,這並不能解決您的腳本問題,我承認我不知道如何解決。

  2. 托管整個打包的 docker 文件,其中已經復制了您的代碼。這是 Mark O'Conner 在他的評論中提到的方法。 發布的工作流程是:

    • 將代碼復制到 docker 容器中。
    • 更新泊塢窗圖像。
    • 將新圖像上傳到您的 docker 存儲庫(例如 hub.docker.com 或 Amazon Web Services Elastic Beanstalk)。
    • 更新或啟動新容器映像的新實例。

對於開發,即每天使用第二種方法,您可以有一個啟動腳本,將您的代碼復制到 docker 容器中,並根據需要運行或重新啟動容器內的容器或服務器。 或者,您可以擁有一個單獨的開發 docker 映像,您可以將其配置為將源代碼管理目錄安裝為單獨的卷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM