Docker 官方php镜像用法
转自http://www.yzone.net/blog/120官方的镜像基于 debian 8debian:jessie。 与直接使用apt-get install安装php不同,官方的是下载的源码包编译的,安装目录、相关配置也不同。 也无法直接使用apt-get install php5_mcrypt这样的命令来直接安装扩展镜像地址:https://hub.docker.com...
转自http://www.yzone.net/blog/120
官方的镜像基于 debian 8 debian:jessie
。 与直接使用 apt-get install
安装php不同,官方的是下载的源码包编译的,安装目录、相关配置也不同。 也无法直接使用 apt-get install php5_mcrypt
这样的命令来直接安装扩展
镜像自带了当前版本的php源码包,下载的源码包在 /usr/src/php.tar.xz
。
可使用docker官方提供的 docker-php-source extract
来快速解压它,解压目录 /usr/src/php/
。
同样可以用
docker-php-source delete
来快速删除/usr/src/php/
目录。
安装核心扩展
核心扩展是自带在php源码包里面的,解压后在 /usr/src/php/ext
。
可以方便的使用 docker 官方提供的 docker-php-ext-install [gettext]
来快速安装并启用扩展。
docker-php-ext-install gettext
# 可以同时安装多个
docker-php-ext-install gettext mysqli opcache pdo_mysql sockets
需要注意的是有些扩展需要依赖库,此时需先安装依赖库才能成功的安装相应的扩展。例如 gd
mcrypt
的扩展。
# Must install dependencies for your extensions manually, if need.
apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd
根据 docker-php-ext-install
命令的提示可直接本地编译安装的扩展有
bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv
imap interbase intl json ldap mbstring mcrypt mssql mysql mysqli oci8 odbc opcache pcntl
pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix
pspell readline recode reflection session shmop simplexml snmp soap sockets spl standard
sybase_ct sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip
大部分已经默认安装启用了。
安装PECL扩展
官方镜像中已经默认有 pear
pecl
工具了,可以使用 pecl 安装常用的php扩展(e.g. xdebug memcached
)。
同样有些扩展依赖第三方库,需先安装它们。
# Install PECL extensions
$ apt-get install -y \
# for memcache
libmemcache-dev \
# for memcached
libmemcached-dev \
&& pecl install memcache && docker-php-ext-enable memcache \
&& pecl install memcached && docker-php-ext-enable memcached \
# && pecl install gearman && docker-php-ext-enable gearman \
# && pecl install xdebug && docker-php-ext-enable xdebug \
# && pecl install redis && docker-php-ext-enable redis \
# && pecl install xhprof && docker-php-ext-enable xhprof
安装其它扩展
其他的扩展需要自己手动下载编译。
$ curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
&& mkdir -p xcache \
&& tar -xf xcache.tar.gz -C xcache --strip-components=1 \
&& rm xcache.tar.gz \
&& ( \
cd xcache \
&& phpize \
&& ./configure --enable-xcache \
&& make -j$(nproc) \
&& make install \
) \
&& rm -r xcache \
&& docker-php-ext-enable xcache
问题
有一些需要注意的地方
- 官方的镜像使用的是 监听 9000 端口,没有启用 Unix sock,配置nginx 站点时要注意使用
fastcgi_pass [host]:9000;
。 需要的话可以在/usr/local/etc/php-fpm.d/www.conf
配置listen
。 - 默认没有写pid文件,也需要在
/usr/local/etc/php-fpm.conf
启用
将 php-fpm 加入 service
将 php-fpm 加入 service 可以更方便的管理(重启、停止php-fpm等)。首先要在php-fpm配置中启用pid文件。 pid文件的默认位置在 /usr/local/php/var/run/php-fpm.pid
。
拷贝php官方提供的service文件到 /etc/init.d
cp /usr/src/php/sapi/fpm/init.d.php-fpm.in /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
编辑 /etc/init.d/php-fpm
,加上正确的配置:
prefix=@prefix@
exec_prefix=@exec_prefix@
php_fpm_BIN=@sbindir@/php-fpm
php_fpm_CONF=@sysconfdir@/php-fpm.conf
php_fpm_PID=@localstatedir@/run/php-fpm.pid
配置后:
prefix=/usr/local
exec_prefix=/usr/local/bin/php
php_fpm_BIN=/usr/local/sbin/php-fpm
php_fpm_CONF=/usr/local/etc/php-fpm.conf
php_fpm_PID=$prefix/var/run/php-fpm.pid
OK,现在就可以使用 service php-fpm [status|start|reload]
等命令了。
完整的配置
完整的 php 5.6 fpm Dockerfile 配置如下:
FROM php:5.6-fpm
MAINTAINER inhere<cloud798@126.com>
# 更换(debian 8)软件源
# RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak
# ADD data/resources/debian8.sources /etc/apt/sources.list
# extions
# Install Core extension
#
# bcmath bz2 calendar ctype curl dba dom enchant exif fileinfo filter ftp gd gettext gmp hash iconv
# imap interbase intl json ldap mbstring mcrypt mssql mysql mysqli oci8 odbc opcache pcntl
# pdo pdo_dblib pdo_firebird pdo_mysql pdo_oci pdo_odbc pdo_pgsql pdo_sqlite pgsql phar posix
# pspell readline recode reflection session shmop simplexml snmp soap sockets spl standard
# sybase_ct sysvmsg sysvsem sysvshm tidy tokenizer wddx xml xmlreader xmlrpc xmlwriter xsl zip
#
# Must install dependencies for your extensions manually, if need.
RUN apt-get update && apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libmcrypt-dev \
libpng12-dev \
&& docker-php-ext-install -j$(nproc) iconv mcrypt \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install -j$(nproc) gd \
# no dependency extension
&& docker-php-ext-install gettext mysqli opcache pdo_mysql sockets
# Install PECL extensions
RUN apt-get install -y \
# for memcache
libmemcache-dev \
# for memcached
libmemcached-dev \
&& pecl install memcache && docker-php-ext-enable memcache \
&& pecl install memcached && docker-php-ext-enable memcached \
&& pecl install gearman && docker-php-ext-enable gearman \
&& pecl install xdebug && docker-php-ext-enable xdebug \
&& pecl install redis && docker-php-ext-enable redis \
&& pecl install xhprof && docker-php-ext-enable xhprof \
&& docker-php-source delete \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/* \
&& echo 'PHP 5.6 installed.'
# Other extensions
# RUN curl -fsSL 'https://xcache.lighttpd.net/pub/Releases/3.2.0/xcache-3.2.0.tar.gz' -o xcache.tar.gz \
# && mkdir -p xcache \
# && tar -xf xcache.tar.gz -C xcache --strip-components=1 \
# && rm xcache.tar.gz \
# && ( \
# cd xcache \
# && phpize \
# && ./configure --enable-xcache \
# && make -j$(nproc) \
# && make install \
# ) \
# && rm -r xcache \
# && docker-php-ext-enable xcache
# open pid file
RUN sed -i '/^;pid\s*=\s*/s/\;//g' /usr/local/etc/php-fpm.d/www.conf \
# add php-fpm to service
&& cp services/php/5.6/php-fpm /etc/init.d/php-fpm && chmod +x /etc/init.d/php-fpm
# && chkconfig --add php-fpm
# ADD data/packages/php-tools/composer.phar /usr/local/bin/composer
# RUN chmod 755 /usr/local/bin/composer
WORKDIR "/var/www"
################################################################################
# Volumes
################################################################################
VOLUME ["/var/www"]
# extends from parent
# EXPOSE 9000
# CMD ["php-fpm"]
更多推荐
所有评论(0)