Maison > Article > Opération et maintenance > Quelle est la différence entre arg et env dans docker
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.
L'environnement d'exploitation de ce tutoriel : système linux7.3, version docker-1.13.1, ordinateur Dell G3.
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
# 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!