2022-08-17:更新了 php8.0 的 Dockerfile
2022-01-21:更新了 php7.4 的 Dockerfile
幾年前的一個(gè)項(xiàng)目圣贸,近期準(zhǔn)備遷移至新服務(wù)器扛稽,于是想著嘗鮮下 docker吁峻,雖然折騰了不少時(shí)間捐友,總的來說還是還是搞定了(能用就行),小小的成就感帮匾,想想以前手動(dòng)編譯時(shí)瘟斜,心里那個(gè)苦啊,這次試過換 7.4螺句,奈何要改太多的代碼,果斷放棄
# docker compose
./docker-compose.yml
# 原版的配置文件蛇尚,末尾追加了內(nèi)容 “Include conf/extra/httpd-vhosts.conf”
./conf/httpd.conf
# 主要的 httpd 配置在這里面
./conf/httpd-vhosts.conf
# php 鏡像構(gòu)建文件
./php56/Dockerfile
# 代碼目錄
./resource
./docker-compose.yml
version: "3.9"
services:
httpd:
image: httpd:alpine
restart: always
volmes:
- ./conf/httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./conf/httpd-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf
- ./resource:/resource
ports:
- "80:80"
depends_on:
- php-fpm
php-fpm:
build: ./php56
restart: always
volumes:
- ./resource:/resource
depends_on:
- redis
redis:
image: redis:alpine
restart: always
Image PHP:5.6
./php56/Dockerfile
FROM php:5.6-fpm-alpine
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache \
freetds-dev \
freetype \
libmcrypt \
libpng \
libwebp \
libjpeg-turbo \
&& apk add --no-cache --virtual build-apks \
autoconf make gcc \
libc-dev \
zlib-dev \
bzip2-dev \
libmcrypt-dev \
libxml2-dev \
libpng-dev \
libwebp-dev \
libjpeg-turbo-dev \
freetype-dev \
&& cd /usr/local/etc/php \
&& docker-php-ext-configure gd --with-png-dir --with-webp-dir --with-jpeg-dir --with-freetype-dir \
&& docker-php-ext-install -j$(nproc) mysqli pdo_mysql pdo_dblib soap gd zip bz2 mcrypt sockets \
&& pecl install http://pecl.php.net/get/redis-4.3.0.tgz \
&& echo 'extension=redis.so' >> conf.d/php-ext-redis.ini \
&& pecl install https://pecl.php.net/get/xdebug-2.5.5.tgz \
&& echo 'zend_extension=xdebug.so' >> conf.d/php-ext-xdebug.ini \
&& cp php.ini-production php.ini \
&& echo 'date.timezone=PRC' > conf.d/timezone.ini \
&& apk del build-apks \
&& rm -rf /root/.cache \
&& rm -rf /var/cache/apk/* \
&& rm -rf /usr/src/php \
&& rm -rf /tmp/*
Image PHP:8.0
./php80/Dockerfile
FROM php:8.0-fpm-alpine
# 設(shè)置 DNS
RUN echo 'nameserver 114.114.114.114' > /etc/resolv.conf \
# 修改源
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache \
freetds-dev \
freetype \
libzip \
libmcrypt \
libpng \
libwebp \
libjpeg-turbo \
&& apk add --no-cache --virtual build-apks \
autoconf make gcc \
libc-dev \
zlib-dev \
bzip2-dev \
libzip-dev \
libmcrypt-dev \
libxml2-dev \
libpng-dev \
libwebp-dev \
libjpeg-turbo-dev \
freetype-dev \
&& cd /usr/local/etc/php \
&& cp php.ini-production php.ini \
# 安裝擴(kuò)展
&& docker-php-ext-configure gd --with-webp --with-jpeg --with-freetype \
&& docker-php-ext-install -j$(nproc) mysqli pdo_mysql pdo_dblib soap gd zip bz2 sockets \
&& pecl install xdebug \
&& echo 'zend_extension=xdebug' >> conf.d/php-ext-xdebug.ini \
&& pecl install mcrypt \
&& echo 'extension=mcrypt' >> conf.d/php-ext-mcrypt.ini \
&& pecl install redis \
&& echo 'extension=redis' >> conf.d/php-ext-redis.ini \
# 其他配置
&& echo 'date.timezone=PRC' > conf.d/timezone.ini \
# 清理以減少占用
&& apk del build-apks \
&& rm -rf /root/.cache /var/cache/apk/* /usr/src/php /tmp/*
php-fpm
默認(rèn)是以 www-data:www-data
運(yùn)行匆笤,這里需要考慮之后的權(quán)限問題
我宿主機(jī)內(nèi)的代碼目錄 uid:gid
是 1000:1000
勇凭,修改配置文件替換即可
# 我是在容器創(chuàng)建后,才發(fā)現(xiàn)這個(gè)問題虾标,懶得重來,直接容器內(nèi)修改的
docker exec msweb-php-fpm sed -i 's/www-data/1000/g' /usr/local/etc/php-fpm.d/www.conf
# 需要重啟
docker-compose restart php-fpm
# 加載模塊
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 定義變量
Define resource /resource
# 目錄設(shè)置
<Directory ${resource}>
Options Indexes FollowSymLinks
Require all granted
AllowOverride All
DirectoryIndex index.html index.php
IndexOptions Charset=UTF-8
</Directory>
<FilesMatch \.php$>
SetHandler "proxy:fcgi://php-fpm:9000"
</FilesMatch>
# 虛擬主機(jī)
<VirtualHost *:80>
# ServerName 127.0.0.1
# ServerAlias alias.com
DocumentRoot ${resource}/server/public
ErrorLog logs/master-error_log
CustomLog logs/master-access_log common
</VirtualHost>