详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

栏目: 服务器 · Nginx · 发布时间: 5年前

内容简介:Tips:一般在生产环境都是负载均衡,定时任务是单独在一个容器执行,故此是注释掉的,需要单独在定时任务容器中打开即可。

一、配置目录结构

详解构建 <a href='https://www.codercto.com/topics/18749.html'>PHP</a> 开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

1.1 crontabs

# do daily/weekly/monthly maintenance
# min   hour    day     month   weekday command
# *         *         *         *         *         /usr/bin/php /usr/share/nginx/html/artisan schedule:run >> /dev/null 2>&1

Tips:一般在生产环境都是负载均衡,定时任务是单独在一个容器执行,故此是注释掉的,需要单独在定时任务容器中打开即可。

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

2.1 nginx与php配置文件

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

Tips:由于php配置文件是监听的sock,默认情况下监听端口 9000。PHP-FPM使用Unix套接字,这避免了TCP的开销。

3.1 php

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

二、Dockerfile详解

#1.Base Image
FROM alpine

# ensure www-data user exists
#RUN set -x \
#    && addgroup -g 82  -S www-data \
#    && adduser -u 82 -D -S -G www-data www-data

# Environments
ENV TIMEZONE            Asia/Shanghai
ENV PHP_MEMORY_LIMIT    512M
ENV MAX_UPLOAD          50M
ENV PHP_MAX_FILE_UPLOAD 200
ENV PHP_MAX_POST        100M
ENV COMPOSER_ALLOW_SUPERUSER 1

#2.ADD-PHP-FPM

# Mirror mirror switch to Alpine Linux - http://dl-4.alpinelinux.org/alpine/
RUN apk update \
    && apk upgrade \
    && apk add \
        curl \
        tzdata \
        php7-fpm\
        php7 \
        php7-dev \
        php7-apcu \
        php7-bcmath \
        php7-xmlwriter \
        php7-ctype \
        php7-curl \
        php7-exif \
        php7-iconv \
        php7-intl \
        php7-json \
        php7-mbstring\
        php7-opcache \
        php7-openssl \
        php7-pcntl \
        php7-pdo \
        php7-mysqlnd \
        php7-mysqli \
        php7-pdo_mysql \
        php7-pdo_pgsql \
        php7-phar \
        php7-posix \
        php7-session \
        php7-xml \
        php7-simplexml \
        php7-mcrypt \
        php7-xsl \
        php7-zip \
        php7-zlib \
        php7-dom \
        php7-redis\
        php7-tokenizer \
        php7-gd \
        php7-mongodb\
        php7-fileinfo \
        php7-zmq \
        php7-memcached \
        php7-xmlreader \
     && cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime \
    && echo "${TIMEZONE}" > /etc/timezone \
    && apk del tzdata \
     && rm -rf /var/cache/apk/*

# https://github.com/docker-library/php/issues/240
# https://gist.github.com/guillemcanal/be3db96d3caa315b4e2b8259cab7d07e
# https://forum.alpinelinux.org/forum/installation/php-iconv-issue

RUN mkdir -p /usr/local/var/log/php7/
RUN mkdir -p /usr/local/var/run/
COPY ./php/php-fpm.conf /etc/php7/
COPY ./php/www.conf /etc/php7/php-fpm.d/

RUN apk add --no-cache --repository http://dl-3.alpinelinux.org/alpine/edge/testing gnu-libiconv
ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so php
RUN rm -rf /var/cache/apk/*


# Set environments
RUN sed -i "s|;*date.timezone =.*|date.timezone = ${TIMEZONE}|i" /etc/php7/php.ini && \
    sed -i "s|;*memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|i" /etc/php7/php.ini && \
    sed -i "s|;*upload_max_filesize =.*|upload_max_filesize = ${MAX_UPLOAD}|i" /etc/php7/php.ini && \
    sed -i "s|;*max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|i" /etc/php7/php.ini && \
    sed -i "s|;*post_max_size =.*|post_max_size = ${PHP_MAX_POST}|i" /etc/php7/php.ini && \
    sed -i "s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= 0|i" /etc/php7/php.ini

#3.Install-Composer
RUN curl -sS https://getcomposer.org/installer | \
    php -- --install-dir=/usr/bin/ --filename=composer



#4.ADD-NGINX
RUN apk add nginx
COPY ./nginx/conf.d/default.conf /etc/nginx/conf.d/
COPY ./nginx/nginx.conf /etc/nginx/
COPY ./nginx/cert/ /etc/nginx/cert/

RUN mkdir -p /usr/share/nginx/html/public/
COPY ./php/index.php /usr/share/nginx/html/public/
#RUN mkdir -p /run/nginx
#RUN touch /run/nginx/nginx.pid
# Expose volumes

VOLUME ["/usr/share/nginx/html", "/usr/local/var/log/php7", "/var/run/"]
WORKDIR /usr/share/nginx/html


#5.ADD-SUPERVISOR
RUN apk add supervisor \
 && rm -rf /var/cache/apk/*

# Define mountable directories.
VOLUME ["/etc/supervisor/conf.d", "/var/log/supervisor/"]
COPY ./supervisor/conf.d/ /etc/supervisor/conf.d/

#6.ADD-CRONTABS
COPY ./crontabs/default /var/spool/cron/crontabs/
RUN cat /var/spool/cron/crontabs/default >> /var/spool/cron/crontabs/root
RUN mkdir -p /var/log/cron \
 && touch /var/log/cron/cron.log

VOLUME /var/log/cron

#8.添加启动脚本
# Define working directory.
WORKDIR /usr/share/nginx/html
COPY ./entrypoint.sh /usr/share/nginx/html/
RUN chmod +x /usr/share/nginx/html/entrypoint.sh
#CMD ["supervisord", "--nodaemon", "--configuration", "/etc/supervisor/conf.d/supervisord.conf"]
ENTRYPOINT ["./entrypoint.sh"]

传送门: Dockerfile、Docker-Compose基本命令与介绍

三、镜像制作与启动

3.1 根据Dockerfile制作镜像

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

3.2 查看制作的镜像

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

3.3 启动镜像

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

3.4 浏览器查看是否成功

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

四、镜像发布

4.1 镜像发布

一定要登录

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

4.2 自动构建

当关联的github代码发生改变是,自动触发构建。

详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel

GitHub地址: https://github.com/tcyfree/anpsc

Docker Hub镜像地址: https://cloud.docker.com/repo...


以上所述就是小编给大家介绍的《详解构建PHP开发基础镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

HTML5从入门到精通

HTML5从入门到精通

明日科技 / 清华大学出版社 / 2012-9 / 59.80元

《HTML5从入门到精通》系统、全面地讲解了HTML语言及其最新版本HTML5的新功能与新特性,技术新颖实用。书中所有知识点均结合实例进行讲解,方便读者动手实践。同时在每章的最后还设置了习题,通过这些习题可以对本章学到的知识进行巩固。《HTML5从入门到精通》不仅能够使读者系统而全面地学习理论知识,还能满足读者充分实践的需求。一起来看看 《HTML5从入门到精通》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具