由于数据api需要使用php,之前是借用easyimage容器,本文用docker建立镜像,并生成一个简单的php环境容器。
Dockerfile
不会写,从github上fork了cnrtv/phpserver。
Dockerfile内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| FROM php:7.3-fpm-alpine3.11 ADD repositories /etc/apk/repositories ADD default.conf / ADD index.php / ADD run.sh / ADD php.ini /usr/local/etc/php/ RUN apk update && apk add nginx && \ apk add m4 autoconf make gcc g++ linux-headers && \ docker-php-ext-install pdo_mysql opcache mysqli && \ pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redis && \ mkdir /run/nginx && \ mv /default.conf /etc/nginx/conf.d && \ mv /index.php /var/www/html && \ touch /run/nginx/nginx.pid && \ chmod 755 /run.sh && \ apk del m4 autoconf make gcc g++ linux-headers
EXPOSE 80 EXPOSE 9000
ENTRYPOINT ["/run.sh"]
|
有alpine仓库设置文件repositories,php设置文件php.ini,nginx设置文件default.conf,shell脚本run.sh。还有一个index.php是一个简单文件上传程序。
建立镜像
克隆仓库到本地后,运行:
docker build -t user/phpserver:v1 .
user是用户名,phpserver是镜像名,v1是tag,注意最后有一个”.”。
完成后用docker images查看,已得到一个名为user/phpserver,tag为v1的镜像。
运行容器
docker run -d --name php -p 80:80 user/phpserver:v1
得到一个开放端口为80的php运行环境,可从ip:80访问。
有要测试的php文件,可用docker cp命令复制到容器的/var/www/html/路径下使用。
本身自带的index.php可以上传文件,只是上传完了看不见文件名列表,不方便,不如docker cp和docker exec -it简单粗暴。
容器建立后会出现权限问题,需要进入容器执行以下命令:
1 2 3 4 5
| chown -R www-data:www-data /var/www/html chown -R nginx:nginx /var/www/html chmod -R 755 /var/www/html chmod 644 /var/www/html/*.php
|
权限正确的dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| FROM php:7.3-fpm-alpine3.11
ADD repositories /etc/apk/repositories ADD default.conf / ADD index.php / ADD run.sh / ADD php.ini /usr/local/etc/php/
RUN apk update && apk add nginx && \ apk add m4 autoconf make gcc g++ linux-headers && \ docker-php-ext-install pdo_mysql opcache mysqli && \ pecl install -o -f redis \ && rm -rf /tmp/pear \ && docker-php-ext-enable redis && \ mkdir -p /run/nginx && \ mv /default.conf /etc/nginx/conf.d && \ mv /index.php /var/www/html && \ touch /run/nginx/nginx.pid && \ chmod 755 /run.sh && \ chown -R www-data:www-data /var/www/html && \ chmod -R 755 /var/www/html && \ find /var/www/html -type f -exec chmod 644 {} \; && \ sed -i 's/user nginx;/user www-data;/g' /etc/nginx/nginx.conf && \ chown -R www-data:www-data /run/nginx && \ apk del m4 autoconf make gcc g++ linux-headers
EXPOSE 80 EXPOSE 9000
ENTRYPOINT ["/run.sh"]
|
ds的答案,未经测试。