我花了大概一周的时间进行了各种踩坑及实验,最终得出了一份可以使用的dockerfile及compose

内含如下支持

php7

mysql_pdo

postgre_pdo

phpredis

swoole(可选,如应用swoole,dockerfile及nginx的配置会有所变化)

dockerfile分为两部分,一部分为php服务,一部分为nginx(swoole下可选)

先贴代码吧

### php7 ###

FROM php:7.2-rc-fpm-alpine3.6

ENV TIMEZONE Asia/Shanghai

ENV PHP_MEMORY_LIMIT 512M

ENV MAX_UPLOAD 50M

ENV PHP_MAX_FILE_UPLOAD 200

ENV PHP_MAX_POST 100M

## swoole版本,如需安装swoole则取消注释

#ENV PHP_EXT_SWOOLE=swoole-2.0.6

ENV PHP_REDIS=3.1.4

#基础依赖

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \

apk update && \

apk add tzdata curl && \

cp /usr/share/zoneinfo/${TIMEZONE} /etc/localtime && \

echo "${TIMEZONE}" > /etc/timezone && \

apk --update --repository=http://dl-4.alpinelinux.org/alpine/edge/testing add \

php7-common php7-intl php7-gd php7-mcrypt php7-openssl \

php7-gmp php7-json php7-dom php7-pdo php7-zip \

php7-zlib php7-mysqli php7-bcmath php7-pdo_mysql php7-pgsql \

php7-pdo_pgsql php7-gettext php7-xmlreaderhp7-xmlrpc \

php7-bz2 php7-iconv php7-curl php7-ctype php7-fpm \

php7-mbstring php7-session php7-phar curl curl-dev postgresql-dev \

## 如果使用swoole 需要取消下行注释

# hiredis-dev libmcrypt-dev gmp-dev icu-dev linux-headers musl --virtual .phpize-deps $PHPIZE_DEPS \

tzdata && \

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \

php composer-setup.php && \

php -r "unlink('composer-setup.php');" && \

mv composer.phar /usr/local/bin/composer && \

composer self-update && \

sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php7/php-fpm.conf && \

sed -i -e "s/listen\s*=\s*127.0.0.1:9000/listen = 9000/g" /etc/php7/php-fpm.d/www.conf && \

sed -i "s|;date.timezone =.*|date.timezone = ${TIMEZONE}|" /etc/php7/php.ini && \

sed -i "s|memory_limit =.*|memory_limit = ${PHP_MEMORY_LIMIT}|" /etc/php7/php.ini && \

sed -i "s|upload_max_filesize =.*|upload_max_filesize = ${MAX_UPLOAD}|" /etc/php7/php.ini && \

sed -i "s|max_file_uploads =.*|max_file_uploads = ${PHP_MAX_FILE_UPLOAD}|" /etc/php7/php.ini && \

sed -i "s|post_max_size =.*|max_file_uploads = ${PHP_MAX_POST}|" /etc/php7/php.ini && \

sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/" /etc/php7/php.ini && \

sed -i "s/;extension=php_pgsql.dll/extension=php_pgsql.dll/" /etc/php7/php.ini && \

sed -i "s/;extension=php_pdo_pgsql.dll/extension=php_pdo_pgsql.dll/" /etc/php7/php.ini && \

mkdir -p /usr/src/php/ext/redis && \

curl -L https://github.com/phpredis/phpredis/archive/$PHP_REDIS.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 && \

echo 'redis' >> /usr/src/php-available-exts && \

docker-php-ext-install redis pgsql pdo pdo_mysql pdo_pgsql && \

rm -rf /var/cache/apk/*

# 如需安装swoole,取消以下注释

#RUN \

# cd /tmp \

# && pecl download $PHP_EXT_SWOOLE \

# && mkdir -p /tmp/$PHP_EXT_SWOOLE \

# && tar -xf ${PHP_EXT_SWOOLE}.tgz -C /tmp/$PHP_EXT_SWOOLE --strip-components=1 \

# && docker-php-ext-configure /tmp/$PHP_EXT_SWOOLE --enable-async-redis --enable-openssl --enable-sockets=/usr/local/include/php/ext/sockets \

# && docker-php-ext-install /tmp/$PHP_EXT_SWOOLE \

# && rm -rf /tmp/${PHP_EXT_SWOOLE}*

WORKDIR /www

# 放入自己需要的代码

#COPY . /www

# 安装composer依赖

#RUN composer install

# php-fpm使用以下配置

EXPOSE 9000

CMD ["php-fpm"]

# swoole 使用以下配置

EXPOSE 9501

# 启动swoole server

CMD ["php","src/server","start"]

## swoole可以不依赖nginx 所以我单独贴出php-fpm的nginx

nginx-dockerfile:

from nginx:1.13.6-alpine

ENV TIME_ZONE Asiz/Shanghai

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && \

apk update && \

apk add --no-cache tzdata && \

echo "${TIME_ZONE}" > /etc/timezone && \

ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime

COPY default.conf /etc/nginx/conf.d

EXPOSE 80

STOPSIGNAL SIGTERM

CMD ["nginx", "-g", "daemon off;"]

nginx_php-fpm:default.conf:

server {

listen 80;

server_name *.yourserver.com;

location / {

autoindex on;

if ($request_filename !~* /(index\.php|assets|uploads|phpinfo\.php))

{

rewrite ^/(.*)$ /index.php/$1 last;

}

}

location ~ .php(/|$) {

fastcgi_split_path_info ^(.+?\.php)(/.*)$;

fastcgi_pass php-fpm:9000;

fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME /www$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

include fastcgi_params;

}

}

compose:

* swoole的编排模板很容易写 我就不在这里贴出了

version: '2'

services:

php-fpm:

image: "php-fpm"

restart: always

#日志系统,可不写

#logging:

# driver: fluentd

# options:

# fluentd-address: "logaddr:24224"

# tag: "docker/{{.Name}}/{{.ID}}/{{.ImageName}}"

php-nginx:

image: "php-nginx"

depends_on:

#这几个\是转义字符 但是不知道为什么就显示出来了,使用的时候自己去掉一下

\- php-fpm

ports:

\- "80:80"

links:

\- php-fpm

restart: always

#日志系统,可不写

#logging:

# driver: fluentd

# options:

# fluentd-address: "logaddr:24224"

# tag: "docker/{{.Name}}/{{.ID}}/{{.ImageName}}"

我所做的是对php及nginx进行解耦

如果集群内有多个php服务需要互相访问,

因为compose不允许两个服务互相link

所以需要创建一个network在network中借助nginx进行互相访问

但是目前只有v3版的compose支持本功能,很多旧集群都无法正常支持本功能,所以我就不贴出代码了

编辑完成后,即可通过80端口访问index.php了

alpine登陆mysql_如何构建一个php7-alpine的docker镜像相关推荐

  1. 从零开始构建一个高可靠的RabbitMQ镜像集群

    从零开始构建一个高可靠的RabbitMQ镜像集群 1.集群环境节点规划如表所示: 1 集群构建 1.停止MQ服务,首先停止3个节点的服务的命令如下: service rabbitmq-server s ...

  2. 构建属于自己的 jre Docker 镜像

    1. 概述 在实际项目中,有时官方提供的相关 docker 镜像不能满足企业对于镜像内部安全的要求:所以大型的企业都会构建属于企业内部的中间件的 docker 镜像. 2. 基于Alpine 制作 j ...

  3. alpine_glibc 构建sun jdk 8的docker镜像

    2019独角兽企业重金招聘Python工程师标准>>> 构建系统基础镜像 alpine glibc 的Dockerfile内容如下: alpine:3.6 MAINTAINER to ...

  4. centos7 怎么封装自己的镜像_在Centos7系统上制作一个7系的Docker镜像

    上一次手动制作Docker镜像教程是在Centos6.5系统上实现的,利用febootstrap工具制作: 但是在Centos7系统上无法使用Yum来安装febootstrap工具,如果确实要安装也可 ...

  5. docker-maven-plugin:自动构建Maven多模块的Docker镜像,并推送到Docker Registry或阿里云

    目录 docker-maven-plugin 基本介绍 使用手册 Maven Goals命令 Maven命令执行顺序 Skip Docker Goals Bound to Maven Phases(跳 ...

  6. 构建一个属于自己的Jenkins镜像

    本文目标 不使用Jenkins官方提供的镜像,从最简系统镜像搭建一个最新稳定版的Jenkins镜像,自定义镜像内有的工具如jdk.gradle.node等,使用Dockfile与Shell脚本搭建而成 ...

  7. 基于Dockerfile创建一个最简单的docker镜像

    试着创建一个docker image, 不在乎实用性和功能,只是对docker 创建image 有个大概的了解,所以有此文章. 文章目录 step1. 创建文件夹 step2. 进入文件夹 step3 ...

  8. docker Alpine一个只有5M小而美的Docker镜像

    docker Alpine一个只有5M小而美的Docker镜像 参考链接: Alpine 一个只有5M的Docker镜像 http://www.infoq.com/cn/news/2016/01/Al ...

  9. 云效(原RDC)如何构建一个基于Maven的Java项目

    最近在将公司的持续集成架构做一个系统的调整,调整过程中受到了RDC团队大量的帮助,所以利用国庆时间写了几篇RDC的分享,希望能让更多的人了解和用好RDC这个产品. 我会把我最近3个月的使用体会分成5个 ...

最新文章

  1. python 变量名重新赋值 变量重新赋值 通过字典的方式
  2. CentOS 初体验十五:阿里云安装Nginx
  3. 「Python」ubuntu使用make命令安装python(带详细解释和防坑指南)
  4. false shell 判断_六、Shell流程控制-if判断语句
  5. erlang mysql性能瓶颈,Erlang Mysql:如何防止SQL注入
  6. python 指针_C++的动态内存:C++的指针
  7. Python基础:内置异常(未完待续)
  8. 配置映射文件中使用的类的类型别名typeAliases
  9. HTTP、HTTP2、HTTPS、SPDY等的理解及在spring-boot中的使用
  10. 通过json发送html代码_Python简单程序爬取天气信息,定时以邮件发送给朋友
  11. PCA(主成分分析法)使用情景及排序企业综合实力示例
  12. 梯度下降算法和逆误差传播算法
  13. 老式十字锁自动碰锁,换锁芯
  14. No installations recognized 以及 nvm use切换node版本无效的解决办法
  15. 高途季报图解:营收11亿 已停止K-9服务,谋求转型
  16. 紫装の槍使い(トゥーヴァ) / 紫枪(异时层土法)
  17. 2017年全球大数据产业报告之海外篇(第五集)
  18. 基于centos 安装配置Docker ssl
  19. Thinkepad X270 升级内存升级SSD重装WIN7经历(解决HD 620驱动 热键调节亮度)
  20. 什么是线性表?什么是线性表的顺序存储结构?什么是线性表的链式存储结构?

热门文章

  1. python-非负矩阵分解-NMF
  2. 【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)
  3. python logging模块的作用及应用场景_Python logging模块原理解析及应用
  4. python中复选框取消修改_python – 如何在PySide / PyQt中设置“只读复选框”
  5. vc2017 linux printf,C/C++中自定义信息输出——printf与宏的配合使用
  6. beautifulsoup网页爬虫解析_爬虫第三天——初识Xpath
  7. 链表操作时头结点的好处
  8. VS2019 更新MSDN并创建快捷方式
  9. 句子录音打分代码参考
  10. matlab7.0停止工作,matlab7.0闪退是怎么回事_matlab7.0闪退怎么办