做網站怎么偷源碼做網站/阿里seo排名優(yōu)化軟件
利用php官網鏡像php:7.3-fpm,會存在部分插件缺失的情況,自行搭建可適用業(yè)務的鏡像,才是真理
Dockerhub 上 PHP 官方基礎鏡像主要分為三個分支:
- cli: 沒有開啟 CGI 也就是說不能運行fpm。只可以運行命令行。
- fpm: 開啟了CGI,可以用來運行web服務也可以用來運行cli命令。
- zts: 開啟了線程安全的版本。
1、繼承基礎鏡像
FROM php:7.3-fpm
- 指定構建鏡像的基礎源鏡像,如果本地沒有指定的鏡像,則會自動從 Docker 的公共庫 pull 鏡像下來。
- 必須是 Dockerfile 中非注釋行的第一個指令,即一個 Dockerfile 從 FROM 開始
2、安裝PHP擴展
2、安裝擴展
2.1、安裝dockerhub中php官方提供的擴展
- 安裝一些常用的組件:pdo、pdo_mysql等
FROM php:7.3-fpm
docker-php-ext-install pdo pdo_mysql mcrypt zip gd pcntl opcache bcmath# 擴展指定一些自定義的編譯參數的話
FROM php:7.3-fpm
RUN docker-php-ext-install pdo pdo_mysql mcrypt zip pcntl opcache bcmath\
&& docker-php-ext-install -j$(nproc) iconv \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
2.2、使用PECL安裝擴展
RUN pecl install grpc \
&& docker-php-ext-enable grpc \
&& pecl install -o -f redis \
&& docker-php-ext-enable redis \
&& rm -rf /tmp/pear
2.3、源碼安裝擴展
- 針對復雜插件
RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
&& mkdir -p /tmp/xcache \
&& tar -xf xcache.tar.gz -C /tmp/xcache --strip-components=1 \
&& rm xcache.tar.gz \
&& docker-php-ext-configure /tmp/xcache --enable-xcache \
&& docker-php-ext-install /tmp/xcache \
&& rm -r /tmp/xcache
3.開源的鏡像庫
- webdevops/php-nginx:7.3-alpine
- firehmx/php-7.3.33-fpm-alpine3.14:v1
4.實際例子
構造一個php7.3.33的鏡像
4.1、查看官方基礎鏡像有什么擴展:
docker run php:7.3.34-fpm-alpine3.14 php -m
4.2、安裝
安裝創(chuàng)建庫:redis、zip、gd、bcmath、pdo_mysql、opcache
- redis:redis是目前主流的Nosql數據庫,常用。
- zip:文件壓縮擴展。
- gd:圖片處理擴展,一些圖形驗證碼的生成不能沒有這個擴展。
- bcmath:沒有這個庫的話可能一些框架或者類庫的composer依賴校驗會無法通過。
- pdo_mysql:連接數據庫擴展。
- opcache: 是 PHP 中的 Zend 擴展,可以大大提升 PHP 的性能。
4.2.1 創(chuàng)建工程目錄
# 創(chuàng)建目錄
mkdir lnmp/php -p
cd lnmp/php/# compser地址:https://github.com/composer/composer/releases
--
wget https://github.com/composer/composer/releases/download/2.6.3/composer.phar# 配置文件1
mkdir conf.d
echo "date.timezone = Asia/Shanghai" > conf.d/date.ini# 配置文件2
# 這里加 \EOF 是防止${OPCODE}被轉義
--
cat >> conf.d/opcode.ini << \EOF
opcache.enable=${OPCODE}
enable_clopcache.enable_cli=1
opcache.revalidate_freq=60
opcache.max_accelerated_files=100000
opcache.validate_timestamps=1
EOF
# 配置文件3
cat www.conf
--
[www]
user = www
group = www
listen = 0.0.0.0:9000
pm = dynamic
pm.max_children = 100
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 50# Dockerfile
touch Dockerfile
--
FROM php:7.3.33-fpm-alpine3.14
LABEL MAINTAINER="ifanaticfire@gmail.com"
ENV TZ "Asia/Shanghai"
ENV TERM xterm
# 默認關閉opcode
ENV OPCODE 0COPY ./conf.d/ $PHP_INI_DIR/conf.d/
COPY composer.phar /usr/local/bin/composer
COPY www.conf /usr/local/etc/php-fpm.d/www.conf
# 創(chuàng)建www用戶
RUN addgroup -g 1000 -S www && adduser -s /sbin/nologin -S -D -u 1000 -G www www
# 配置阿里云鏡像源,加快構建速度
RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories# PHPIZE_DEPS 包含 gcc g++ 等編譯輔助類庫,完成編譯后刪除
RUN apk add --no-cache $PHPIZE_DEPS \
&& apk add --no-cache libstdc++ libzip-dev vim\
&& apk update \
&& pecl install redis-5.3.4 \
&& pecl install zip \
&& pecl install swoole \
&& docker-php-ext-enable redis zip swoole\
&& apk del $PHPIZE_DEPS
# docker-php-ext-install 指令已經包含編譯輔助類庫的刪除邏輯
RUN apk add --no-cache freetype libpng libjpeg-turbo freetype-dev libpng-dev libjpeg-turbo-dev \
&& apk update \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
&& docker-php-ext-install -j$(nproc) pdo_mysql \
&& docker-php-ext-install -j$(nproc) opcache \
&& docker-php-ext-install -j$(nproc) bcmath \
&& docker-php-ext-install -j$(nproc) mysqli \
&& chmod +x /usr/local/bin/composerRUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"
EXPOSE 9000
ENTRYPOINT ["php-fpm"]# 構建腳本
cat build-command.sh
--
docker build -t php-7.3.33-fpm-alpine3.14:v1 .# 運行腳本
sh build-command.sh # 查看鏡像
docker images
---
php-7.3.33-fpm-alpine3.14 v1 088d571602a3 43 minutes ago 116MB查看構建鏡像:116M
4.3 推送到dockerhub
docker tag php-7.3.33-fpm-alpine3.14:v1 firehmx/php-7.3.33-fpm-alpine3.14:v1# 未登錄的話 docker login 登錄
docker push firehmx/php-7.3.33-fpm-alpine3.14:v1
參考
- https://segmentfault.com/a/1190000018372614
- https://www.cnblogs.com/syushin/p/14955582.html
- https://hub.docker.com/_/php
- https://github.com/suyar/docker-php