• 技术文章 >运维 >Docker

    docker中arg和env的区别是什么

    长期闲置长期闲置2022-01-28 10:40:20原创64

    docker中arg和env的区别是:arg是在build的时候存在的,可以在Dockerfile中当做变量来使用,而env是容器构建好之后的环境变量,不能在Dockerfile中当参数使用。

    本教程操作环境:linux7.3系统、docker-1.13.1版、Dell G3电脑。

    docker中arg和env的区别是什么

    在使用 docker-compoe 构建镜像的时候会感觉 ARG 和 ENV 的作用很相似, 但是这两个存在就肯定有它的原因

    它们起作用的时机

    从这里可以看出来 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

    这里的变量用的就是 ARG 而不是 ENV了,因为这条命令运行在 Dockerfile 当中的, 像这种临时使用一下的变量没必要存环境变量的值就很适合使用 ARG

    推荐学习:《docker视频教程

    以上就是docker中arg和env的区别是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:docker
    上一篇:docker容器与传统虚拟化的区别是什么 下一篇:docker安装mysql和直接安装的区别是什么

    相关文章推荐

    • docker 显示中文乱码怎么办• docker是否开源• 什么是docker hub• 如何解决docker telnet不通的问题• 如何解决docker http 500错误问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网