2015-10-26 20 views
5

Ich muss das gleiche Skript auf zwei docker Bilder ausführen.Docker Bedingtes Build-Image

Meine Dockerfile sind:

FROM centos:6 
... 

und

FROM centos:7 
... 

Ist es possibile eine einzelne Datei und einen Parameter übergeben, so etwas wie:

FROM centos:MYPARAMS 

und während des Baus etwas wie das:

docker build --no-cache MYPARAMS=6 . 

Danke

Antwort

4

Von meinem Wissen ist dies mit Docker nicht möglich.

Die alternative Lösung besteht darin, eine Dockerfile "Vorlage" zu verwenden und dann mit der Vorlagenbibliothek Ihrer Wahl zu analysieren. (Oder sogar mit sed Befehl)

+0

siehe http://StackOverflow.com/a/33353438/1497139 für eine Implementierung dieses Ansatzes –

2

Bei https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33351864 finden Sie eine Bash-Skript "Build", die so funktioniert, wie Sie möchten.

[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 

Der wesentliche Teil der „hier“ Dokument verwendet wird:

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

Genau dies in richtigen Zusammenhang zu stellen, ist es jetzt (seit Mai 2017) möglich, da 17.05 dies mit reinem Docker zu erreichen (https://github.com/moby/moby/pull/31352)

Dockerfile sollte wie folgt aussehen (ja, Befehle in dieser Reihenfolge):

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

Dann wird bauen mit

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

Docker werden versuchen, aufgerufen, um die Build auf dem Bild app:1-c351dae2

half mir ungemein Logik um Gebäude Bilder zu reduzieren, zu stützen.

+1

Nur ein Wort der Warnung, die im Dokument beschrieben wird (https://docs.docker.com/engine/reference/ builder/# verstehen-wie-arg-und-von-interaktiv): Wenn Sie Ihr Argument nach dem FROM verwenden müssen, müssen Sie es nach dem FROM neu deklarieren – cube45