Maison  >  Article  >  Opération et maintenance  >  Quelle est la différence entre arg et env dans docker

Quelle est la différence entre arg et env dans docker

WBOY
WBOYoriginal
2022-01-28 10:40:206562parcourir

La différence entre arg et env dans docker est la suivante : arg existe pendant la construction et peut être utilisé comme variable dans le Dockerfile, tandis qu'env est une variable d'environnement après la construction du conteneur et ne peut pas être utilisé comme paramètre dans le Dockerfile.

Quelle est la différence entre arg et env dans docker

L'environnement d'exploitation de ce tutoriel : système linux7.3, version docker-1.13.1, ordinateur Dell G3.

Quelle est la différence entre arg et env dans docker ?

Lorsque vous utilisez docker-compoe pour créer une image, vous sentirez que les fonctions d'ARG et ENV sont très similaires, mais ces deux existences doivent avoir leurs raisons

Le timing de leur effet

  • arg existe lors de la construction et peut être utilisé comme variable dans le Dockerfile.

  • env est une variable d'environnement après la construction du conteneur. Elle ne peut pas être utilisée comme paramètre dans le Dockerfile. Vous pouvez le voir ici. ARG est spécialement conçu pour créer des images

  • Prenez un exemple spécifique
# Dockerfile
FROM redis:3.2-alpine
LABEL maintainer="GPF <5173180@qq.com>"
ARG REDIS_SET_PASSWORD=developer
ENV REDIS_PASSWORD ${REDIS_SET_PASSWORD}
VOLUME /data
EXPOSE 6379
CMD ["sh", "-c", "exec redis-server --requirepass \"$REDIS_PASSWORD\""]

Il s'agit d'un fichier pour construire Redis. Il y a une telle phrase

ARG REDIS_SET_PASSWORD=developer
ENV REDIS_PASSWORD ${REDIS_SET_PASSWORD}

Au milieu, elle sert la phrase

CMD ["sh", "-c", "exec redis-server --requirepass \"$REDIS_PASSWORD\""]

. qui est dans Définissez le mot de passe lors du démarrage de redis, car lorsque CMD est exécuté, cela signifie que le conteneur a été construit et exécuté avec succès. À ce stade, CMD exécute les commandes dans le conteneur, donc les variables dans CMD sont l'environnement. variables plutôt que dans les variables Dockerfile dans ARG, donc la valeur dans ARG doit être attribuée à ENV pendant la construction

Un autre exemple d'utilisation d'ARG

FROM nginx:1.13.1-alpine
LABEL maintainer="GPF <5173180@qq.com>"
#https://yeasy.gitbooks.io/docker_practice/content/image/build.html
RUN mkdir -p /etc/nginx/cert \
    && mkdir -p /etc/nginx/conf.d \
    && mkdir -p /etc/nginx/sites
COPY ./nginx.conf /etc/ngixn/nginx.conf
COPY ./conf.d/ /etc/nginx/conf.d/
COPY ./cert/ /etc/nginx/cert/
COPY ./sites /etc/nginx/sites/
ARG PHP_UPSTREAM_CONTAINER=php-fpm
ARG PHP_UPSTREAM_PORT=9000
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf
VOLUME ["/var/log/nginx", "/var/www"]
WORKDIR /usr/share/nginx/html

Ici, nous utilisons simplement ARG

ARG PHP_UPSTREAM_CONTAINER=php-fpm
ARG PHP_UPSTREAM_PORT=9000
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf

Les variables ici utilisent ARG au lieu d'ENV. . Étant donné que cette commande s'exécute dans le Dockerfile, il n'est pas nécessaire de stocker la valeur de la variable d'environnement pour une variable utilisée temporairement comme celle-ci. Il est très approprié d'utiliser ARG

Apprentissage recommandé : "

Tutoriel vidéo Docker

".

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn