2015-10-26 28 views
5

Devo eseguire lo stesso script su due immagini docker.Docker Conditional build image

mio Dockerfile sono:

FROM centos:6 
... 

e

FROM centos:7 
... 

E 'possibile avere un singolo file e passare un parametro, qualcosa come:

FROM centos:MYPARAMS 

e durante la compilazione qualcosa del genere:

docker build --no-cache MYPARAMS=6 . 

Grazie

risposta

4

Dalla mia conoscenza, questo non è possibile con Docker.

La soluzione alternativa è quella di utilizzare un Dockerfile "template", e quindi analizzarlo utilizzando la libreria modello di vostra scelta. (O anche usando il comando sed)

+0

vedere http://stackoverflow.com/a/33353438/1497139 per un'implementazione di questo approccio –

2

Al https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33351864 troverai uno script di bash "build" che funziona nel modo desiderato.

[email protected]:~/source/docker/docker-stackoverflowanswers/33351864>./build -v 6 
Sending build context to Docker daemon 3.584 kB 
Step 0 : FROM centos:6 
6: Pulling from library/centos 
fa5be2806d4c: Pull complete 
ebdbe10e9b33: Downloading 4.854 MB/66.39 MB 
... 

[email protected]:~/source/docker/docker-stackoverflowanswers/33351864>./build -v 7 
Sending build context to Docker daemon 3.584 kB 
Step 0 : FROM centos:7 

La parte essenziale è il documento "qui" usato:

# 
# parameterized dockerfile 
# 
dockerfile() { 
    local l_version="$1" 
cat <<EOF> Dockerfile 
FROM centos:$l_version 
EOF 
} 
4

solo per mettere questo nel giusto contesto, è ora (dal maggio 2017) possibile raggiungere questo obiettivo con puro finestra mobile dal 17.05 (https://github.com/moby/moby/pull/31352)

Dockerfile dovrebbe essere simile (sì, i comandi in questo ordine):

ARG APP_VERSION 
ARG GIT_VERSION 
FROM app:$APP_VERSION-$GIT_VERSION 

poi costruire viene richiamato con

docker build --build-arg APP_VERSION=1 --build-arg GIT_VERSION=c351dae2 . 

Docker cercherà di basare la costruzione sull'immagine app:1-c351dae2

Mi ha aiutato immensamente a ridurre logica attorno alle immagini di costruzione.

+1

Solo una parola di avviso descritta nel documento (https://docs.docker.com/engine/reference/ builder/# understand-how-arg-and-from-interact): se hai bisogno di usare il tuo argomento dopo il comando FROM, dovrai ridichiarlo dopo il comando FROM – cube45

Problemi correlati