• docker


    -Dockerfile保留字

    docker中arg和env的区别是什么

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

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

    它们起作用的时机

    • arg 是在 build 的时候存在的, 可以在 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
    

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

    -Djava.security.egd=file:/dev/./urandom参数的作用

    centos7.2 启动卡在部署 manager 上 -Djava.security.egd=file:/dev/./urandom
    将$JAVA_HOME/jre/lib/security/Java.security内,将securerandom.source的内容改为file:/dev/./urandom即可

    Linux或者部分unix系统提供随机数设备是/dev/random 和/dev/urandom ,两个有区别,urandom安全性没有random高,但random需要时间间隔生成随机数。

    /dev/random可能在生成随机数的时候卡住了,导致tomcat启动不了

    在服务器启动时使用加上参数 -Djava.security.egd=file:/dev/./urandom 来使用urandom产生随机数

    其中

    -Djava.security.egd=file:/dev/random( 这等于默认选项 )
    默认算法: NativePRNG
    提供程序: SecureRandom.NativePRNG算法来自:SUN

    -Djava.security.egd=file:/dev/urandom
    默认算法: NativePRNG
    提供程序: SecureRandom.NativePRNG算法来自:SUN

    -Djava.security.egd=file:/dev/./urandom
    默认算法: DRBG
    提供者: SecureRandom.DRBG算法来自:SUN

    结论

    1. 建议继续使用-Djava.security.egd=file:/dev/./urandom 以确保:

    2. 无论使用什么平台(DRBG),都可以利用最强大的 SecureRandom 实现
      避免使代码意外阻塞(securerandom.source=file:/dev/urandom)

  • 相关阅读:
    2024-6-19(沉默springboot)
    20231116模拟赛题解
    MyBatis 配置 typeAliases 标签
    GpsAndMap模块开源,欢迎测评
    算法金 | 10 大必知的自动化机器学习库(Python)
    Amazon DynamoDB 设计与建模最佳实践之 AI 数字人场景
    双十一来临,仓储物流快递安全保障解决方案
    C语言练习题——实参形参
    算法试题——每日一练
    木聚糖-聚乙二醇-苯硼酸,PBA-PEG-Xylan,苯硼酸-PEG-木聚糖
  • 原文地址:https://blog.csdn.net/song854601134/article/details/126953554