暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker构建PHP+Nginx镜像

572


最近两天将自己的项目从宝塔抽离出来转到docker进行部署,最近刚好有一个项目的环境是PHP+Nginx需要进行抽离,想到将代码直接打包到PHP+Nginx镜像里进行部署,基于这个需求,决定构建一个PHP+Nginx环境镜像作为基础镜像。下面跟大家分享构建步骤

 

一、创建Nginx配置文件
我们在当前构建目录下创建一个文件default.conf,内容如下
    server {
    listen 80;
    server_name localhost;


    root var/www/html;
    index index.html index.htm index.nginx-debian.html;


    location {
    try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }

     

    二、创建测试文件
    同样在当前构建目录下创建一个文件index.php,内容如下
      <?php
      phpinfo();

       

      三、创建启动命令文件
      同样在当前构建目录下创建一个文件run.sh,我们让镜像默认启动PHP、Nginx、Crond(定时任务),这三个服务,这里说明下,为了以后我们可以将定时任务直接放到容器里跑,不用在宿主机跑,这里我们让crond默认启动,内容如下
        #!/usr/bin/env sh
        set -e


        crond
        php-fpm -D
        nginx -g 'daemon off;'

         

        四、创建构造文件
        我们在当前构建目录下创建文件Dockerfile,内容如下
          FROM php:7.3.32-fpm-alpine3.13
          LABEL MAINTAINER="hzx790254812@gmail.com"
          ENV TZ "Asia/Shanghai"


          # 时区
          RUN echo ${TZ} >/etc/timezone


          # 创建www用户
          RUN addgroup -g 1000 -S www && adduser -s sbin/nologin -S -D -u 1000 -G www www


          # 配置阿里云镜像源,加快构建速度。
          RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories


          # PHPIZE_DEPS包含gcc g++等编译辅助类库,完成后删除;pecl安装扩展。
          RUN apk add --no-cache $PHPIZE_DEPS \
          && apk add --no-cache libstdc++ libzip-dev vim\
          && apk update \
          && pecl install redis-5.3.0 \
          && pecl install zip \
          && pecl install swoole \
          && docker-php-ext-enable redis zip swoole\
          && apk del $PHPIZE_DEPS


          # docker-php-ext-install安装扩展。
          RUN apk update \
          && apk add --no-cache nginx freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev \
          && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
          && docker-php-ext-install -j$(nproc) gd \
          && docker-php-ext-install -j$(nproc) pdo_mysql opcache bcmath mysqli


          # 安装Composer
          RUN php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
          RUN php composer-setup.php
          RUN php -r "unlink('composer-setup.php');"
          RUN mv composer.phar /usr/local/bin/composer


          # Nginx配置
          COPY default.conf /etc/nginx/http.d/
          COPY index.php /var/www/html
          # 在run.sh
          COPY run.sh /run.sh
          RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" && mkdir -p /run/nginx/ && chmod +x /run.sh
          # 执行run.sh
          ENTRYPOINT ["/run.sh"]
          # 暴露端口
          EXPOSE 80

          我们直接拿一个PHP7.3做基础镜像,安装Nginx以及Composer

           

          五、构建镜像
          我们通过以下命令进行构建
            docker build -t hongzhuangxian/php7.3_nginx .

            等待构建完成即可,为了方便使用,我们可以将他push到镜像仓库,我这里是放在阿里云镜像仓库。


            【图】来源于网络

            【文】https://hongzx.cn/home/blogShow/234

            Follow

            佛布朗斯基博客

            (佛布朗斯基)我是一只热爱编程的码农,已从事后端开发5年以上,也正因此,在日常工作学习中,会遇到蛮多问题需要解决,我希望透过记录,真实地将问题以及解决方法保存下来,更为高效地解决问题是我的初衷。


             

            文章转载自程序员技术笔记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论