2014-09-06 17 views
5

Sto cercando di creare un'immagine in Docker che richiede alcuni file segreti per eseguire operazioni come il recupero da un repository privato di git. Ho visto un sacco di gente con il codice come questo:Accesso ai segreti/file privati ​​necessari per la creazione in Dockerfile?

ADD id_rsa /root/.ssh/id_rsa 
RUN chmod 700 /root/.ssh/id_rsa 
RUN touch /root/.ssh/known_hosts 
RUN ssh-keyscan github.com >> /root/.ssh/known_hosts 
RUN git clone [email protected]:some/repo.git /usr/local/some_folder 

Anche se funziona, significa che devo conservare il mio id_rsa privato con la mia immagine, che mi sembra una cattiva idea. Quello che preferirei fare è conservare i miei file segreti in alcuni cloud storage come s3, e passare semplicemente le credenziali come variabili di ambiente per essere in grado di trascinare tutto il resto.

So che posso passare le variabili di ambiente in docker run con lo switch -e, ma se ho bisogno di alcuni file in fase di compilazione (come id_rsa per eseguire un clone git), cosa posso fare? Idealmente sarei in grado di passare le variabili di ambiente a docker build, ma non è possibile (non riesco a capire perché).

Quindi, idee? Qual è la cosa canonica/corretta da fare qui? Non posso essere la prima persona con questo problema.

+0

possibile duplicato di [Docker e password di protezione] (http://stackoverflow.com/questions/22651647/docker-and-securing-passwords) –

+0

Perché è necessario clonare il repository durante la creazione del contenitore? Non puoi avere quei file già presenti localmente? In questo modo ti sbarazzi del problema con i file segreti e non hai bisogno di installare git sull'immagine –

+0

@ AbelMuiño il repository verrà aggiornato indipendentemente da Docker, quindi su ogni nuova immagine, vogliamo sempre la versione più recente di il pronti contro termine.La clonazione di un repository locale e il fatto che questi file siano separatamente parte dell'immagine causerà più lavoro nel dover aggiornare costantemente il repository e vanificherà lo scopo dell'utilizzo di Git in primo luogo. – Eli

risposta

2

Comincerò con la parte più facile, che credo sia un malinteso comune:

Idealmente mi piacerebbe essere in grado di passare le variabili di ambiente a finestra mobile costruire, ma non è possibile (non posso capire perché).

Una build di finestra mobile è pensata per essere riproducibile. Dato lo stesso contesto (i file nella stessa directory dello Dockerfile) l'immagine risultante è la stessa. Sono anche pensati per essere semplici. Entrambe le cose spiegano l'assenza di opzioni ambientali o di altri condizionali.

Ora, perché la costruzione ha bisogno di essere riproducibili, l'esecuzione di ogni comando è memorizzati nella cache. Se esegui il build due volte, lo git pull verrà eseguito solo la prima volta.

Con il tuo commento, questo non è ciò che si intende:

così via ogni nuova generazione di immagine, vogliamo sempre la versione più recente del repo

Per attivare una nuova build è necessario per cambiare il contesto o lo Dockerfile.

Il canonica modo (probabilmente sto abusando della parola, ma questo è come il automated builds lavoro) è quello di includere il Dockerfile in git.

Ciò consente un flusso di lavoro semplice di git pull ; docker build ... ed evita il problema con l'archiviazione delle credenziali git.

Problemi correlati