Alpine跑php项目,Dockerfile构建PHP开发镜像: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:一般在生产环境都是负载均衡,定时任务是单独在一个容器执行,故此是注释掉的,需要单独在定时任务容器中打开即可。
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 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"]
三、镜像制作与启动
3.1 根据Dockerfile制作镜像
3.2 查看制作的镜像
3.3 启动镜像
3.4 浏览器查看是否成功
四、镜像发布
4.1 镜像发布
一定要登录
4.2 自动构建
当关联的github代码发生改变是,自动触发构建。
Alpine跑php项目,Dockerfile构建PHP开发镜像:Alpine+Nginx+PHP7+Supervisor+Crontab+Laravel相关推荐
- 学习笔记五:dockerfile 构建生产环境镜像
dockerfile 构建生产环境镜像 dockerfile构建nginx镜像 dockerfile构建tomcat镜像 tomcat 的自动启动 把Go代码基于dockerfile做成镜像 把pyt ...
- Dockerfile构建jdk1.8镜像
Dockerfile 常用命令 命令 作用 FROM image_name:tag 定义了使用哪个基础镜像启动构建流程 MAINTAINER user_name 声明镜像的创建者 ENV key va ...
- 通过dockerfile构建jar包镜像
1.编写Dockerfile文件 # 指定基础镜像 FROM java:8 # 维护者信息 MAINTAINER key "422943393@qq.com" # 拷贝jar包 A ...
- Dockerfile构建centos7python3.6镜像并启动python
docker构建centos7python3.6镜像 python镜像下载 Dockerfile 构建和启动 python镜像下载 https://registry.npmmirror.com/bin ...
- 使用Dockerfile构建SpringBoot应用镜像
一.准备 1.把你的springboot项目打包成可执行jar包 2.把jar包上传到Linux服务器 二.构建 1.在jar包路径下创建Dockerfile文件vi Dockerfile # 指定基 ...
- Docker进阶篇之DockerFile,教你用DockerFile构建镜像
文章目录 一.DockerFile介绍 二.DockerFile构建过程 三.DockerFile指令 四.实战测试 4.1 对比原生CentOS 五.CMD 和 ENTRYPOINT 的区别 5.1 ...
- 使用Dockerfile构建自己的etcd镜像
2019独角兽企业重金招聘Python工程师标准>>> 本篇文章手把手教你如何使用Dockerfile构建自己etcd镜像,并且已经提供基于etcd3.0.10 的image供读者使 ...
- React教程(六)——使用 create-react-app 快速构建 React 开发环境
1.create-react-app是什么? 做一个react项目,构建其开发环境对初学者来说是很困难的!所以,facebook专门出了create-react-app命令,用于react项目开发环境 ...
- 根据Dockerfile构建镜像
根据Dockerfile构建出一个镜像 Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条 指令对应Linux下面的一条命令.Docker程序将这些Do ...
最新文章
- java复杂吗_java – 是哈希一个合适的解决方案吗?我过度复杂吗?
- Solaris ALOM1.6 SC Password Reset
- 校宝在线携手神策数据 数据赋能产品服务体验双升级
- api接口rsa加密
- java 万年历_非常实用的java万年历制作方法
- win8 apache php mysql_windows8.1下Apache+Php+MySQL配置步骤
- php异业联盟平台源码,基于ThinkPHP5.1框架开发的B2C在线商城系统PHP源码
- Mugeda(木疙瘩)H5案例课—H5酷炫特效制作-岑远科-专题视频课程
- matlab 类型强制转换,关于数据类型强制转换的分析和应用
- Android强行进阶,自定义控件—LayoutManager,技术协会安卓部面试
- Butter Knife[黄油刀]配置
- jQuery UI 实例 - 滑块(Slider)
- 苏宁、长虹、格力,为何“玩不好”旧家电?
- 8088CPU有多少根数据线和地址线?为什么8根数据线却说是16位数据线?
- ACM-ICPC 2018 南京赛区网络预赛 K. The Great Nim Game(博弈)
- 毕业论文写作中数据获取与查询
- Flutter之extension
- 程序员在群里“匿名”骂老板,第二天被开除,聊天记录曝光
- 数据库 SQL Server 修改 表结构 脚本 sql语句
- 中联通首次确定3G上网资费 限流量包月150元