2014-07-16 48 views
4

這似乎是一個經常被問到的問題。我想再問一遍,看看是否有人提出了答案,或者看看有人能否提出其他建議。通過變量或答案Dockerfile

我們有很多計算機和運行服務,通常很難更新它們。 Docker來了。我們希望自動化這個過程。 Docker可以很好地工作,但我想自動化構建,這樣我們團隊中的任何人都可以做到這一點。

該過程的一部分涉及克隆一些git存儲庫。

我可以做的一件事就是使用shell腳本在本地克隆倉庫,然後將它們複製到鏡像中,但由於有一個dockerfile可以自動化,所以將方向放在那裏似乎很自然。

這不是一個問題,除了提供git憑證。

目前我在構建過程中複製了我的id_rsa。雖然是複製它,從回購拉,然後刪除我的憑據。這應該工作正常,除了Dockerfile不接受用戶輸入。

當我在dockerfile中添加我的ssh密鑰時,它想要我的密鑰密碼... docker只是因爲它無法接受用戶輸入而折磨出來。

我該如何解決這個問題並且仍然可以自動化這個過程?

以下是dockerfile的示例。

FROM ubuntu:14.04 
MAINTAINER Senica Gonzalez <[email protected]> 
RUN apt-get -y update 
RUN apt-get -y upgrade 
RUN apt-get -y install git-core 
RUN apt-get -y install vagrant 
RUN mkdir /home/.ssh 
COPY id_rsa /home/.ssh/id_rsa 
RUN eval "$(ssh-agent -s)"; ssh-add /home/.ssh/id_rsa; ssh-add -l 

回答

2

一種方法可能是做git clone你正在做docker build所在的機器上。然後克隆的源文件可以是COPYed to the container

這樣可以保持本地計算機上的所有git密鑰處理,並且不必擔心將ssh密鑰包含在Docker映像中。

4

您不想添加和刪除您的密鑰。每個命令都會創建一個圖層,它存在於圖像歷史記錄中,即使您從最終結果中刪除了標識,它也會出現在歷史記錄中(可以認爲它是將您的標識提交給github,然後刪除它並推送刪除) 。

最簡單的方案是使用具有對存儲庫的讀取訪問權限的新專用(和共享)密鑰。該密鑰不應該有關鍵短語,所以不需要交互式輸入。

如果您使用github,請檢查documentation on Deploy Keys(即使您不這樣做也可能會鼓舞人心)。

這就是說,從Dockerfile內克隆不會是我的選擇。我會爲每個項目或類似的項目使用Dockerfile,以便在構建之前和獨立於構建的情況下進行克隆。