版本介紹
官方倉庫地址 :https://hub.docker.com
搜索php 裏面一般包含了cli、 fpm、 zts 幾個版本的 當前使用的fpm版本 假設要升級到7.2.4版本 這裏也拉取的 7.2.4進行測試
  cli    是命令行版本 
  fpm    是配合nginx 使用 的版本
  zts    是線程安全版本
Dockfile文件
FROM php:7.2.4-fpm
MAINTAINER xiexinyang <983600849@qq.com>

#docker中php擴展安裝方式
#1、PHP源碼文件目錄自帶擴展 docker-php-ext-install直接安裝
#2、pecl擴展 因為一些擴展不包含在PHP源碼文件中,PHP 的擴展庫倉庫中存在。用 pecl install 安裝擴展,再用 docker-php-ext-enable 命令 啓用擴展
#3、其他擴展 一些既不在 PHP 源碼包,也不再 PECL 擴展倉庫中的擴展,可以通過下載擴展程序源碼,編譯安裝的方式安裝

# 擴展版本號定義 

#redis 擴展
ENV PHPREDIS_VERSION 4.0.0
#msgpack擴展
ENV MSGPACK_VERSION 2.0.3
#memcached擴展
ENV MEMCACHED_VERSION 3.1.3
#mongodb擴展
ENV MONGODB_VERSION 1.5.3
#xhprof擴展 https://github.com/longxinH/xhprof/releases(pecl 不支持php7 使用這裏的)
ENV XHPROF_VERSION 2.0.5
#swoole安裝 如果以後用到的話,不用再安裝了,4.0之後性能更好
ENV SWOOLE_VERSION 4.0.3
#swoole依賴hiredis
ENV HIREDIS_VERSION 0.13.3
# 設置時間
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone

# 擴展依賴
RUN apt-get update \
    && apt-get install -y \
        curl \
        wget \
        git \
        zip \
        libz-dev \
        libssl-dev \
        libnghttp2-dev \
        libpcre3-dev \
        libmemcached-dev \
        zlib1g-dev \
    && apt-get clean \
    && apt-get autoremove

# Composer安裝
RUN curl -sS https://getcomposer.org/installer | php \
    && mv composer.phar /usr/local/bin/composer \
    && composer self-update --clean-backups

# Mysqli 擴展 自帶 直接安裝即可(當前數據庫使用的mysqli查詢的)
RUN docker-php-ext-install mysqli
# PDO 擴展 自帶 直接安裝即可
RUN docker-php-ext-install pdo_mysql
# Bcmath 擴展 自帶 直接安裝即可
RUN docker-php-ext-install bcmath
# Redis 擴展下載 pecl本地安裝 開啓擴展
RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tgz \
    && pecl install /tmp/redis.tgz \
    && rm -rf /tmp/redis.tgz \
    && docker-php-ext-enable redis

# msgpack 擴展下載 pecl本地安裝 開啓擴展(延遲隊列使用減少源數據佔用空間)
RUN wget http://pecl.php.net/get/msgpack-${MSGPACK_VERSION}.tgz -O /tmp/msgpack.tgz \
    && pecl install /tmp/msgpack.tgz \
    && rm -rf /tmp/msgpack.tgz \
    && docker-php-ext-enable msgpack

# memcached 擴展下載 pecl本地安裝 開啓擴展 前面已經通過 apt-get安裝了libmemcached-dev依賴
RUN wget http://pecl.php.net/get/memcached-${MEMCACHED_VERSION}.tgz -O /tmp/memcached.tgz \
    && pecl install /tmp/memcached.tgz \
    && rm -rf /tmp/memcached.tgz \
    && docker-php-ext-enable memcached

# mongodb 擴展下載 pecl本地安裝 開啓擴展 前面已經通過 
RUN wget http://pecl.php.net/get/mongodb-${MONGODB_VERSION}.tgz -O /tmp/mongodb.tgz \
    && pecl install /tmp/mongodb.tgz \
    && rm -rf /tmp/mongodb.tgz \
    && docker-php-ext-enable mongodb


# xhprof github上下載支持php7的擴展 安裝 開啓擴展
RUN wget https://github.com/longxinH/xhprof/archive/v${XHPROF_VERSION}.tar.gz -O /tmp/xhprof.tar.gz \
    && mkdir -p /tmp/xhprof \
    && tar -xf /tmp/xhprof.tar.gz -C /tmp/xhprof --strip-components=1 \
    && rm /tmp/xhprof.tar.gz \
    && ( \
        cd /tmp/xhprof/extension \
        && phpize \
        && ./configure  \
        && make -j$(nproc) \
        && make install \
    ) \
    && rm -r /tmp/xhprof \
    && docker-php-ext-enable xhprof


# Hiredis依賴安裝
RUN wget https://github.com/redis/hiredis/archive/v${HIREDIS_VERSION}.tar.gz -O /tmp/hiredis.tar.gz \
  && mkdir -p /tmp/hiredis \
    && tar -xf /tmp/hiredis.tar.gz -C /tmp/hiredis --strip-components=1 \
    && rm /tmp/hiredis.tar.gz \
    && ( \
        cd /tmp/hiredis \
        && make -j$(nproc) \
        && make install \
        && ldconfig \
    ) \
    && rm -r /tmp/hiredis

# Swoole 擴展安裝 開啓擴展
RUN wget https://github.com/swoole/swoole-src/archive/v${SWOOLE_VERSION}.tar.gz -O /tmp/swoole.tar.gz \
    && mkdir -p /tmp/swoole \
    && tar -xf /tmp/swoole.tar.gz -C /tmp/swoole --strip-components=1 \
    && rm /tmp/swoole.tar.gz \
    && ( \
        cd /tmp/swoole \
        && phpize \
        && ./configure --enable-async-redis --enable-mysqlnd --enable-openssl --enable-http2 \
        && make -j$(nproc) \
        && make install \
    ) \
    && rm -r /tmp/swoole \
    && docker-php-ext-enable swoole
開始構建鏡像並啓動容器
//需要在Dockerfile 所在目錄執行 如果composer 安裝失敗請重新執行一次 有時候網絡不穩定
$ sudo docker build -t fpm-php-7.2:v1.0.0 .
//如果沒有異常 執行到最後會看到如下類似輸出 當前已經構建成功
---> fde9a12f4191
Removing intermediate container 762112489b3a
Successfully built fde9a12f4191
//通過如下命令查看已經構建好的鏡像
$ sudo docker images 
REPOSITORY           TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
fpm-php-7.2          v1.0.0              fde9a12f4191        10 minutes ago      452.4 MB
下面開始啓動一個容器來運行該鏡像吧
  • 啓動一個名字為fpm-php-7.2.4容器並且設置自動重啓 容器端口9000 映射主機9001 主機目錄/data/home 映射到容器/data/home dns使用宿主機 守護方式啓動
$ sudo docker run --name php-fpm-7.2.4 \
  --restart=always \
  -p 9001:9000  \
  -v /data/home:/data/home \
  -v /data/logs/php7:/data/logs \
    $(cat /etc/hosts|awk -F ' ' '{if(NR>2){print "--add-host "$2":"$1}}') \
  --privileged \
  -d fpm-php-7.2:v1.0.0
//出現如下輸出 則啓動成功
$ sudo docker ps
CONTAINER ID        IMAGE                COMMAND                CREATED             STATUS              PORTS                    NAMES
642e62c1eeda        fpm-php-7.2:v1.0.0   "docker-php-entrypoi   4 minutes ago       Up 4 minutes        0.0.0.0:9001->9000/tcp   php-fpm-7.2.4