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

我花了大概一周的时间进行了各种踩坑及实验,最终得出了一份可以使用的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了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503670.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

armbian nginx 部署博客_通过Git将Hexo博客部署到服务器

本文首发于我的个人博客https://orxing.top,欢迎来访服务器是用的阿里云ECS CentOS,本来是用来部署WordPress的,后来接触了Hexo,就把Hexo直接部署到了GitHub pages和Coding Pages上,但是最近发现Coding pages经常抽风&…

shell把mysql每句导出_shell实现,将mysql每个存储过程导出为单个文件_MySQL

#shell实现,将mysql中存储过程代码直接导出为文件dbcn"mysql -h172.16.1.194 -uroot -p123456 ";dbBCReport_Sync_Executor;ii0;ct$dbcn -N -e " select count(1) from mysql.proc as p where 11 and p.db$db and p.type like P%;";mkdir -p /c…

python弹出窗口后卡死_python的tkinter模块GUI编程为啥用了while循环之后就会使得程序出现卡死未响应崩溃?...

这位同学,首先无代码无真相。只能在这里猜测一下,你在GUI界面中点击了某个按钮,调用的函数然后触发了某种while循环,这个时候前台GUI将“未响应”卡死。不过一旦调用函数的while循环结束,GUI界面将再次可用。 不使用线…

python 字符串格式化语法_Python基础语法--字符串格式化

PS:在学习到Python的字符串格式化一些个人的总结,利用字符串格式化可以更好的对代码结果进行格式化输出语法栗子 例子中通过接收用户输入的值,赋值给sex_input和age_input生成两个变量,并根据判断输出相应的语句,and是…

springmvc跳转html_SpringMVC基础(三)

本篇文章主要整理了数据处理、乱码处理和Json的相关知识。参考的狂神说的公众号以及视频。所有代码亲测有效。数据处理主要包括处理提交的数据以及将数据显示到前端。处理提交的数据一般有三种情况:(1)提交的域的名称和方法的参数名称一致时:RequestMapp…

mysql-5.7.24初始化数据库_MySQL5.7.28 初始化数据库

1)初始化随机密码 mysqld --initialize[roothost-172-16-61-102 bin]# ./mysqld --initialize2020-02-15T07:01:38.309015Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documenta…

查看本机所有请求_【松勤教育】Fiddler抓包-只抓APP的请求

fiddler抓手机app的请求,估计大部分都会,但是如何只抓来自app的请求呢?把来自pc的请求过滤掉,因为请求太多,这样会找不到重要的信息了。环境准备:1.电脑上已装fiddler2.手机和电脑在同一局域网一、设置1.fi…

ubuntu18.04升级python_Ubuntu18.04一次性升级Python所有库的方法步骤

pip是什么pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。升级pip版本默认Ubuntu自带的pip (pip 9.0.1)是基于Python2.7的版本我们需要重新安装基于Python3的pip:sudo apt-get install python3-pip升级pip3版本&…

icmp报文格式_TCP/IP(二):IP报文格式详解

1. IP 报文格式0bit是指位于最左边的最高位,31bit是指位于最右边的最低位,4个字节的32bit按照 bigendian(大端格式:低字节位于高地址)字节序传输:首先是0~7bit,其次 8~15bit,然后 16~23bit,最后…

java多线程交替打印_java实现多线程交替打印

本文实例为大家分享了java实现多线程交替打印的具体代码,供大家参考,具体内容如下notifywait实现import org.junit.Test;import java.util.concurrent.*;public class TestThreadLocal {Object o new Object();CountDownLatch cnew CountDownLatch(2);T…

plot函数_时间序列:python移动窗口函数前言

一起学习,一起成长!在移动窗口(可以带有指数衰减权数)上计算的各种统计函数也是一类常见于时间序列的数组变换。它们称为移动窗口函数,其中还包括那些窗口不定长的函数(如指数加权移动平均)。跟其他统计函数一样,移动窗口函数也会…

织梦检测环境不支持mysql_本地测试织梦dedeCMS 安装环境

本地测试织梦dedeCMS 安装环境2018-08-21 134织梦好多想本地测试织梦DEDECMS网站,今天介绍如何在本地安装测试环境,安装织梦系统。第一:环境测试 DedeAMPZ 织梦官方测试软件DedeAMPZ 是直接整合PHP Apache MySql 的服务器环境管理软件&…

一页纸项目管理模板_项目管理职场必备读物!这一次全部送给你!

“大圣,此去欲何?”“踏南天,碎项目。”“若一去不归...”“便一去不复返归!”hello~hello~大家好上一次找到的一篇项目管理书籍送给大家毫无意外地大家纷纷在后台留言要求我还有没有更多的书籍答应你们,这次一次性全部…

浏览器无法运行java_window_浏览器无法运行JAVA脚本的解决方法,1、浏览器无法运行JAVA脚本的 - phpStudy...

浏览器无法运行JAVA脚本的解决方法1、浏览器无法运行JAVA脚本的解决方法。rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%System32dacui.dllrundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%Catrooticatalog.mdbregsvr32 /s comcat.dllregsvr32 /s asctrls.o…

python android自动化_python在Android下的自动化测试用法

# This Python file uses the following encoding: utf-8from com.android.monkeyrunner import MonkeyRunner,MonkeyDevicefrom com.android.monkeyrunner.easy import EasyMonkeyDevice #提供了根据ID进行访问from com.android.monkeyrunner.easy import By #根据ID返回PyObj…

第五届蓝桥杯校内选拔赛试题java组_第五届蓝桥杯校内选拔赛试题java组

第五届“蓝桥杯”全国软件和信息技术专业人才大赛校内选拔赛试题(Java组)第一部分:准备工作:1、在D:盘中建立一个以自己“学号姓名”命名的考生文件夹。如:学号:123456,姓名:张三,则…

nfs需要开通什么端口_创业板开通需要什么条件?开通创业板门槛,要怎么样开通创业板?...

开通创业板需要什么条件,创业板要怎么开通?根据这两个问题进行详细分析创业板股票开通的条件和具体怎么开通,开通创业板之前必须要满足创业板开通条件。一、旧创业板开通条件就得创业板开通是非常简单的,只要满足以下两点&#xf…

java自学报告_Vi,Java,Ant和Junit自学报告

vi自学报告概述vi 编辑器是所有 Unix 及 Linux 系统下最基本的编辑器,它直接以命令行窗口作为显示界面。vim是vi的升级版,完全兼容vi并提供了一些新的特性。因为vi、vim完全脱离鼠标而使用纯键盘控制,所以熟练以后能大大提高编辑效率。vi的模…

java开发文档怎么写_程序员该不该写技术文档,怎么写文档,易懂又能提升自己...

最近公司项目的调用量突然涨了一大波,很多系统都纷纷扛不住了,于是需要对系统进行优化,系统优化的第一步,便是梳理业务!在这个过程中,经常出现了这样一些情况,发现数据库的某些字段,…

java矩阵类_java矩阵类,矩阵的乘法

问题如下我采用的是3重循环,先计算的列的结果,应该还可以先计算行的结果,然后求出矩阵的乘法。没有过多的技巧,就是循环的使用。相关的codepackage day20180728;import java.util.Scanner;class Matrix{private int m,n;private i…