Dans mon Dockerfile, je voudrais définir des variables que je peux tiliser plus tard dans le Dockerfile.
Je connais l'instruction ENV
, mais je ne veux pas que ces variables soient des variables d'environnement.
Existe-t-il un moyen de déclarer les variables à la portée de Dockerfile?
Vous pouvez utiliser ARG
- voir https://docs.docker.com/engine/reference/builder/#arg
L'instruction
ARG
définit une variable que les utilisateurs peuvent transmettre au constructeur à l'aide de la commandedocker build
lors de la création, à l'aide de l'indicateur--build-arg <varname>=<value>
. Si un utilisateur spécifie un argument de construction non défini dans le fichier Dockerfile, la construction génère une erreur.
À ma connaissance, seul ENV
permet cela, comme indiqué dans " Environnement de remplacement "
Les variables d'environnement (déclarées avec l'instruction
ENV
) peuvent également être utilisées dans certaines instructions en tant que variables à interpréter par le fichier Dockerfile.
Ils doivent être des variables d'environnement pour pouvoir être à nouveau déclarés dans chaque nouveau conteneur créé pour chaque ligne du fichier Dockerfile par docker build
.
En d'autres termes, ces variables ne sont pas interprétées directement dans un fichier Dockerfile, mais dans un conteneur créé pour une ligne Dockerfile, d'où l'utilisation d'une variable d'environnement.
Ce jour-là, j'utilise à la fois ARG
( docker 1.10+ et docker build --build-arg var=value
) et ENV
.
Utiliser ARG
seul signifie que votre variable est visible au moment de la construction, et non à l'exécution.
Mon Dockerfile a généralement:
ARG var
ENV var=${var}
Dans votre cas, ARG
suffit: je l'utilise généralement pour définir la variable http_proxy, cette version du docker ayant besoin d'accéder à Internet au moment de la construction.
Pour répondre à ta question:
Dans mon fichier Dockerfile, j'aimerais définir des variables que je pourrai utiliser ultérieurement dans le fichier Dockerfile.
Vous pouvez définir une variable avec:
ARG myvalue=3
Les espaces autour du caractère égal ne sont pas autorisés.
Et utilisez-le plus tard avec:
RUN echo $myvalue > /test
Si la variable est réutilisée dans la même instruction RUN
, vous pouvez simplement définir une variable Shell. J'aime vraiment la façon dont ils ont abordé cette question avec le fichier officiel de Docker Ruby .