ホームページ  >  記事  >  運用・保守  >  docker の arg と env の違いは何ですか

docker の arg と env の違いは何ですか

WBOY
WBOYオリジナル
2022-01-28 10:40:206564ブラウズ

docker における arg と env の違いは次のとおりです。arg はビルド中に存在し、Dockerfile の変数として使用できますが、env はコンテナーのビルド後の環境変数であり、コンテナーのパラメーターとして使用できません。 Dockerfileの使用。

docker の arg と env の違いは何ですか

このチュートリアルの動作環境: linux7.3 システム、docker-1.13.1 バージョン、Dell G3 コンピューター。

docker の arg と env の違いは何ですか

docker-compoe を使用してイメージを構築すると、ARG と ENV の機能は非常に似ているように感じますが、これら 2 つは理由

効果のタイミング

  • arg はビルド中に存在し、Dockerfile 内の変数として使用できます

  • env はコンテナ構築後の環境変数であり、Dockerfile のパラメータとして使用することはできません。

ここから、ARG が特別であることがわかります。イメージを構築するために設計された

具体的な例を見てみましょう

# 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\""]

これはredisを構築するためのファイルで、真ん中にこのような文があります

#
ARG REDIS_SET_PASSWORD=developer
ENV REDIS_PASSWORD ${REDIS_SET_PASSWORD}

文を提供します

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

. この文 Redis起動時にパスワードが設定されるのは、CMDが実行されると、コンテナが正常に構築され、実行されたことを意味するためです このとき、CMDはコンテナ内のコマンドをコンテナ内で実行するので、 CMD の変数は Dockerfile 内の変数ではなく環境変数であるため、ARG の値は構築中に ENV に割り当てる必要があります

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

ここでは 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

このコマンドは Dockerfile で実行されるため、ここでの変数は ENV ではなく ARG です。環境変数の値を保存する必要がなく、変数を一時的に使用する場合は ARG を使用するのが適しています。

推奨される学習: 「docker ビデオ チュートリアル

以上がdocker の arg と env の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。