• 解析:hyperf 官方骨架包的 Dockerfile


    hyperf 官方骨架包的 Dockerfile

    # Default Dockerfile
    #
    # @link     https://www.hyperf.io
    # @document https://hyperf.wiki
    # @contact  group@hyperf.io
    # @license  https://github.com/hyperf/hyperf/blob/master/LICENSE
    
    FROM hyperf/hyperf:8.1-alpine-v3.16-swoole
    LABEL maintainer="Hyperf Developers " version="1.0" license="MIT" app.name="Hyperf"
    
    ##
    # ---------- env settings ----------
    ##
    # --build-arg timezone=Asia/Shanghai
    ARG timezone
    
    ENV TIMEZONE=${timezone:-"Asia/Shanghai"} \
        APP_ENV=prod \
        SCAN_CACHEABLE=(true)
    
    # update
    RUN set -ex \
        # show php version and extensions
        && php -v \
        && php -m \
        && php --ri swoole \
        #  ---------- some config ----------
        && cd /etc/php* \
        # - config PHP
        && { \
            echo "upload_max_filesize=128M"; \
            echo "post_max_size=128M"; \
            echo "memory_limit=1G"; \
            echo "date.timezone=${TIMEZONE}"; \
        } | tee conf.d/99_overrides.ini \
        # - config timezone
        && ln -sf /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
        && echo "${TIMEZONE}" > /etc/timezone \
        # ---------- clear works ----------
        && rm -rf /var/cache/apk/* /tmp/* /usr/share/man \
        && echo -e "\033[42;37m Build Completed :).\033[0m\n"
    
    WORKDIR /opt/www
    
    # Composer Cache
    # COPY ./composer.* /opt/www/
    # RUN composer install --no-dev --no-scripts
    
    COPY . /opt/www
    RUN composer install --no-dev -o && php bin/hyperf.php
    
    EXPOSE 9501
    
    ENTRYPOINT ["php", "/opt/www/bin/hyperf.php", "start"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • FROM
      定制的镜像都是基于 FROM 的镜像

    • LABEL
      LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下:

    • # --build-arg timezone=Asia/Shanghai
      run 的时候添加上时区,Docker 默认和我们的时区不一样

    • ARG
      构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。构建命令 docker build 中可以用 --build-arg <参数名>=<值> 来覆盖。
      格式:ARG <参数名>[=<默认值>]

    • ENV
      设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量

    • RUN
      用于执行后面跟着的命令行命令

    # RUN ["./test.php", "dev", "offline"] 等同于 RUN ./test.php dev offline
    
    • 1
    FROM centos
    RUN yum -y install wget
    RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
    RUN tar -xvf redis.tar.gz
    
    # 等同于:
    
    FROM centos
    RUN yum -y install wget \
        && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
        && tar -xvf redis.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • tee:详解
      Linux tee命令用于读取标准输入的数据,并将其内容输出成文件。
      tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。

    • ln -sf:详解
      -s 软链接(符号链接)
      -f 强制执行

    给文件创建软链接,为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效
    
    ln -s log2013.log link2013
    
    • 1
    • 2
    • 3
    • WORKDIR
      指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。
      docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。

    • COPY
      复制指令,从上下文目录中复制文件或者目录到容器里指定路径。

    • EXPOSE
      仅仅只是声明端口。

    • ENTRYPOINT
      类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
      但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
      优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
      注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

  • 相关阅读:
    工业交换机ERPS环网协议工作原理介绍
    【校招VIP】前端算法考点之大数据相关
    655 输出二叉树——Leetcode天天刷(2022.8.22)【DFS】
    什么是学习能力?如何提高学习能力?
    《算法竞赛·快冲300题》每日一题:“直径点对”
    SpringBoot 接口数据加解密
    【FPGA帧差】基于VmodCAM摄像头的帧差法目标跟踪FPGA实现
    【luogu CF487E】Tourists(圆方树)(树链剖分)(线段树)
    【】Windows 创建 Administrator
    一个超经典 WinForm 卡死问题的再反思
  • 原文地址:https://blog.csdn.net/qq_40176206/article/details/126644900