詳解構建PHP開發基礎映象:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel
一、配置目錄結構
1.1 crontabs
# do daily/weekly/monthly maintenance # minhourdaymonthweekday command # *****/usr/bin/php /usr/share/nginx/html/artisan schedule:run >> /dev/null 2>&1
Tips:一般在生產環境都是負載均衡,定時任務是單獨在一個容器執行,故此是註釋掉的,需要單獨在定時任務容器中開啟即可。
2.1 nginx與php配置檔案
Tips:由於php配置檔案是監聽的sock,預設情況下監聽埠 9000。PHP-FPM使用Unix套接字,這避免了TCP的開銷。
3.1 php
二、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 TIMEZONEAsia/Shanghai ENV PHP_MEMORY_LIMIT512M ENV MAX_UPLOAD50M ENV PHP_MAX_FILE_UPLOAD 200 ENV PHP_MAX_POST100M 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製作映象
3.2 檢視製作的映象
3.3 啟動映象
3.4 瀏覽器檢視是否成功
四、映象釋出
4.1 映象釋出
一定要登入
4.2 自動構建
當關聯的github程式碼發生改變是,自動觸發構建。
GitHub地址: https://github.com/tcyfree/anpsc
Docker Hub映象地址: https://cloud.docker.com/repo...