113 votes

Dockerfile: Définition de plusieurs variables d'environnement sur une seule ligne

J'étais sous l'impression que les variables d'environnement pourrait être mis sur une seule ligne, comme suit, de manière à minimiser l'intermédiaire des images.

FROM alpine:3.6
ENV RUBY_MAJOR 2.4 \
    RUBY_VERSION 2.4.1 \
    RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
    RUBYGEMS_VERSION 2.6.12 \
    BUNDLER_VERSION 1.15.3

Toutefois, l'exécution d'un conteneur en fonction de ce fragment de code et en appelant # set |grep RU je vois que les variables ne sont pas d'être attribués séparément, mais sont combinés dans une seule chaîne.

RUBY_MAJOR='2.4     RUBY_VERSION 2.4.1     RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654     RUBYGEMS_VERSION 2.6.12     BUNDLER_VERSION 1.15.3'

Cependant, si j'définir explicitement chaque variable comme ci-dessous, j'obtiens le résultat escompté et il n'y a pas d'erreurs lors de l'appel de l'variables.

ENV RUBY_MAJOR 2.4
ENV RUBY_VERSION 2.4.1
ENV RUBY_DOWNLOAD_SHA256 4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654
ENV RUBYGEMS_VERSION 2.6.12
ENV BUNDLER_VERSION 1.15.3

Question: Est-il est possible de combiner la configuration des variables d'environnement sur une seule ligne? Si oui, comment pourrais-je le faire? Et est-ce une bonne pratique?

203voto

Tarun Lalwani Points 75641

Il existe deux formats pour la spécification des environnements. Si vous avez besoin d'variable unique, alors vous ci-dessous au format

ENV X Y

Cela va affecter X Y

ENX X Y Z

Cela va affecter X Y Z

Si vous avez besoin d'affecter plusieurs variables d'environnement puis d'utiliser l'autre format

ENV X=Y Z=A

Cela va affecter X Y et Z A. Si votre Dockerfile devrait être

FROM alpine:3.6
ENV RUBY_MAJOR=2.4 \
    RUBY_VERSION=2.4.1 \
    RUBY_DOWNLOAD_SHA256=4fc8a9992de3e90191de369270ea4b6c1b171b7941743614cc50822ddc1fe654 \
    RUBYGEMS_VERSION=2.6.12 \
    BUNDLER_VERSION=1.15.3

RUN env

30voto

Mike Lippert Points 1072

Vous n'avez pas besoin de vous soucier de beaucoup d' ENV commandes à chaque création d'une nouvelle couche intermédiaire final de votre image créée par votre Dockerfile.

de Meilleures pratiques pour la rédaction des Dockerfiles

Réduire le nombre de couches

Avant Docker 17.05, et même plus, avant de Docker 1.10, il est important de minimiser le nombre de couches dans votre image. Les améliorations suivantes ont atténué ce besoin:

  • Dans le menu fixe 1.10 et plus, seulement RUN, COPY, et ADD instructions de créer des couches. D'autres instructions de créer temporaire intermédiaire des images, et non plus directement augmenter la taille de la construction.

  • Docker 17.05 et supérieur ajout du support pour le multi-stade construit, qui permet de copier uniquement les objets dont vous avez besoin dans l'image finale. Ceci vous permet d'inclure des outils et des informations de débogage dans votre intermédiaire étapes de génération sans augmentation de la taille de l'image finale.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X