docker 里的 php

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:gid1000: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>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蘸吓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌库继,老刑警劉巖窜醉,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件艺谆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡静汤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門藤抡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抹估,“玉大人,你說我怎么就攤上這事棋蚌“ざ樱” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵盛垦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我颊埃,道長(zhǎng),這世上最難降的妖魔是什么班利? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任榨呆,我火速辦了婚禮,結(jié)果婚禮上积蜻,老公的妹妹穿的比我還像新娘。我一直安慰自己竿拆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布谢澈。 她就那樣靜靜地躺著,像睡著了一般锥忿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缎谷,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音瑞你,去河邊找鬼希痴。 笑死者甲,一個(gè)胖子當(dāng)著我的面吹牛砌创,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫩实,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼宰缤!你這毒婦竟也來了晃洒?” 一聲冷哼從身側(cè)響起慨灭,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤球及,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后筹陵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惶翻,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年鹅心,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旭愧。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖议泵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情先口,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布厢汹,位于F島的核電站,受9級(jí)特大地震影響烫葬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搭综,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一划栓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧茅姜,春花似錦月匣、人聲如沸钻洒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萍悴。三九已至,卻和暖如春癣诱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撕予。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工实抡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欠母,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓踩寇,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親俺孙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354