基于 Alpine 的 Docker 镜像的操作指南

 Technique  comment

在宿主机上使用容器部署 PHP,以实现多版本 PHP 共存,并实现高度环境隔离。

宿主机上安装的是 PHP 7,而某项目因编写时间过久,使用的是 PHP 5,在宿主中安装多版本并不复杂,但考虑到仅此一个项目使用且考虑到环境隔离于是尝试在容器内部署,以便实现多版本共存。

镜像相关

# docker pull php:5-fpm-alpine 

小贴士:若想指定具体小版本请直接写完整版本号即可,如:php:5.6.31-fpm-alpine

运行容器

# docker run -d --name php5-fpm -p 9000:9000 -v /data/projects:/var/www/html php:5-fpm-alpine

进入容器

# docker exec -it php5-fpm /bin/sh

小贴士:基于 Alpine 容器镜内无内置 bash 解析器,因此请使用 sh 或其他命令解析器。

安装扩展

# docker-php-ext-install mysql
# docker-php-ext-install gd
# docker-php-ext-install zip
# docker-php-ext-install mbstring
# docker-php-ext-install pdo_mysql

发现报错:

If configure fails try --with-webp-dir=<DIR>
If configure fails try --with-jpeg-dir=<DIR>
configure: error: png.h not found.

这是因为缺失扩展所需的依赖导致的,执行以下命令安装依赖:

# apk add --no-cache libpng-dev

注意:Alpine 使用的包管理器为 apk 。

Tips:安装完毕后重新执行即可,若是中国大陆机器可能出现速度不理想或无速度的问题,可使用清华源或者其他的国内源进行更新。

如果安装 pecl 扩展,可以直接运行 pecl 命令,注意版本问题, 以免和当前PHP版本不兼容。

部署相关

查看实际分配的IP地址

# docker network inspect bridge

测试服务端口状态

# telnet 172.17.0.2 9000

修改 NGINX 配置

以样板配置为例

...
    location ~ \.php$ {
        root           /home/milton/somewhere/wwwroot;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    location / {
        root   /home/milton/somewhere/wwwroot;
        index  index.html index.htm index.php;
    }
}

fastcgi_pass 地址修改为容器地址及端口即可。

小贴士:宿主机的 NGINX 配置应指向容器内的项目目录位置,必须注意!本文例子则修改为 /var/www/html

附录

参考链接

回复