搭建php研发环境
使用官方的php-apache环境,搭建本地的研发环境。主要是解决几个遇到的问题。故简单的记录如下。
镜像源
10.131.9.12:5000/scc/php:7.4-apache
# 即官方的源
php:7.4-apache
具体步骤
启动镜像
docker run -d --name qingcloud-dev -p 8081:80 -v $PWD:/var/www/html php:7.4-apache
启动后,大概会遇到各种报错,因为官方的镜像,缺少一些基础的扩展,需要自己手动进入容器内安装。
# 进入容器,后续的操作都是在容器内操作
docker exec -it qingcloud-dev bash
# 直接执行下面的命令会报错,但是会提示,哪些ext能直接安装,见 docker-php-ext-install
docker-php-ext-install redis
# 先到pecl下载 redis
curl https://pecl.php.net/get/redis-5.3.4.tgz -o redis-5.3.4.tgz
ls
tar zxvf redis-5.3.4.tgz
mkdir -p /usr/src/php/ext
mv redis-5.3.4 /usr/src/php/ext/redis
# 然后就能安装了
docker-php-ext-install redis
php -m |grep redis
# 顺道将 mysql安装上,否则也会缺少该插件无法连接数据库,而报错。
docker-php-ext-install pdo_mysql
# 权限问题,根据项目确定。用top 查看,运行的角色
www-data
# 简单起见,全部可写
chown -R www-data:www-data html/
# 需要重启apache服务 加载 php的扩展
exit # 退出容器
docker restart qingcloud-dev
安装gd库
以下未测试过。安装gp库,有依赖,另外还需要配置。下面命令正好展示。
apt update #更新软件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库
docker-php-source extract #解压源码
cd /usr/src/php/ext/gd #gd源码文件夹
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译
docker-php-ext-install gd #编译安装
php -m | grep gd
虽然按如上步骤正常搭建了环境,但是呢,vscode远程过去,跟本地,还是有一些区别。以后考虑,本地推送代码过去,远程来运行。(todo:自己简单的写个推送的服务。)
镜像源内的条件
curl
vim 无
docker-php-ext-install
bcmath bz2 calendar ctype curl dba dom enchant exif ffi fileinfo filter ftp gd gettext
gmp hash iconv imap intl json ldap mbstring 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 reflection session shmop simplexml snmp soap sockets sodium spl standard sysvmsg sysvsem sysvshm tidy tokenizer xml xmlreader xmlrpc xmlwriter xsl zend_test zip
构建示例
ADD命令,放在最后,前面的命令可能会被缓存
FROM 10.131.9.12:5000/scc/php:7.4-apache
RUN docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mysqli
ADD --chown=www-data:www-data phpmyadmin/ /var/www/html/
备注,按装如下库,会报错
docker-php-ext-install pdo_sqlite
configure: error: Package requirements (sqlite3 > 3.7.4) were not met:
docker-php-ext-install pdo_pgsql
checking for PostgreSQL support for PDO… yes, shared
checking for pg_config… not found
configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
一键构建
docker build -t phpapache:1.0 .
docker stop phpapache
docker run --rm -itd --name phpapache -p 0.0.0.0:8008:80 -v ~/php:/var/www/html/php phpapache:1.0
docker image ls | awk '$1=="<none>" && $2=="<none>"{printf "docker rmi %s\n",$3}'|sh
opcode
FROM 10.131.9.12:5000/scc/php:7.4-apache
RUN docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install opcache
ADD _run.sh /run.sh
RUN chmod +x /run.sh \
&& /run.sh
ADD --chown=root:root conf /etc/apache2/
ADD --chown=www-data:www-data html /var/www/html/
run.sh
#!/bin/bash
cat <<EOL >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini
[opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.validate_timestamps=0
opcache.file_cache=/tmp
EOL
拷贝配置文件
docker cp phpapache:/etc/apache2/ conf/