2016-07-03 46 views
9

Ho un contenitore Docker Hub che esegue un'applicazione. Normalmente eseguirà l'applicazione clonando il repository git sorgente, ma nel caso in cui mi piacerebbe eseguire una versione specifica, l'applicazione ha contrassegnato varie versioni. Per esempio che posso fare unQuali sono le migliori pratiche per la codifica delle versioni di Docker Hub

git clone https://github.com/author/application.git 
git checkout release-1.0.0 

Come il manutentore Docker Hub, vorrei rispecchiare le release del software con il contenitore. Ci sono altre opzioni oltre a farlo manualmente quando esce una release?

questo momento il mio Dockerfile contiene qualcosa di simile:

ENV APP_VER=2.0.0 
RUN git clone ...; git checkout ${APP_VER} 

In questo esempio, vorrei mantenere un ramo con tag di un file di finestra mobile che imposta l'APP_VER a 2.1.0 e poi Docker Hub supporta, ma se apporto modifiche al repository, non è chiaro come non apportare modifiche a quel Dockerfile di ciascun ramo.

+1

Se è taggato in Github, il file non cambierà come si collegherebbe al file con tag, no? Ad esempio, [nginx] (https://hub.docker.com/r/_/nginx/). – ldg

+0

Sì, è necessario modificare il file per ciascuna versione, che è ciò che sembra che nginx stesse facendo – Lizbeth

risposta

2

Si dovrebbe essere in grado di fare ciò che si sta descrivendo via di costruzione automatizzata di Docker Hub e in impostazioni di generazione, impostare il pattern matching tra il tag Github Nome e la Docker Nome tag. È possibile utilizzare i caratteri jolly e la variabile {sourceref} `," che fa riferimento al nome del ramo/tag di origine ".

Ogni volta che si preme una nuova immagine con un tag Docker che corrisponde a un tag Github, verrà spostato il Dockerfile corrispondente - i tag precedenti rimarranno intatti. Così qualcuno può tirare un'immagine più vecchia finestra mobile e il codice Github corrispondenza utilizzando il tag come riferimento come lei ha ricordato:

ENV APP_VER=2.1.0 
RUN git clone ... app.git; git -C app checkout ${APP_VER} 

In questo caso, si presuppone che avete Docker Hub impostato in base ai valori e ogni tag (Immagine Docker e Github) è 2.1.0

Non sono proprio sicuro di cosa intenda per "ogni ramo", che potrebbe far parte della confusione, specialmente se sei abituato a SVN. In git, un tag non è legato a un ramo ma piuttosto a un commit specifico (o ~ punto nel tempo), quindi quando si recupera quel tag, utilizzerà sempre la stessa versione del codice come lo era quando quel commit era fatto. (Tipicamente, allo stesso tempo in cui è stata tagliata una versione.)