一、配置目录结构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>&1Tips:一般在生产环境都是负载均衡,定时任务是单独在一个容器执行,故此是注释掉的,需要单独在定时任务容器中打开即可。2.1 nginx与php配置文件Tips:由于php配置文件是监听的sock,默认情况下监听端口 9000。PHP-FPM使用Unix套接字,这避免了TCP的开销。3.1 php二、Dockerfile详解#1.Base ImageFROM 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# EnvironmentsENV TIMEZONE Asia/ShanghaiENV PHP_MEMORY_LIMIT 512MENV MAX_UPLOAD 50MENV PHP_MAX_FILE_UPLOAD 200ENV PHP_MAX_POST 100MENV 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-issueRUN 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-libiconvENV LD_PRELOAD /usr/lib/preloadable_libiconv.so phpRUN rm -rf /var/cache/apk/# Set environmentsRUN 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-ComposerRUN curl -sS https://getcomposer.org/installer | \ php – –install-dir=/usr/bin/ –filename=composer#4.ADD-NGINXRUN apk add nginxCOPY ./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 volumesVOLUME ["/usr/share/nginx/html", “/usr/local/var/log/php7”, “/var/run/"]WORKDIR /usr/share/nginx/html#5.ADD-SUPERVISORRUN 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-CRONTABSCOPY ./crontabs/default /var/spool/cron/crontabs/RUN cat /var/spool/cron/crontabs/default >> /var/spool/cron/crontabs/rootRUN mkdir -p /var/log/cron \ && touch /var/log/cron/cron.logVOLUME /var/log/cron#8.添加启动脚本# Define working directory.WORKDIR /usr/share/nginx/htmlCOPY ./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制作镜像3.2 查看制作的镜像3.3 启动镜像3.4 浏览器查看是否成功四、镜像发布4.1 镜像发布一定要登录4.2 自动构建当关联的github代码发生改变是,自动触发构建。GitHub地址:https://github.com/tcyfree/anpscDocker Hub镜像地址:https://cloud.docker.com/repo…
...