日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2024/7/23 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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了

總結

以上是生活随笔為你收集整理的alpine登陆mysql_如何构建一个php7-alpine的docker镜像的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。