docker打包一个php环境

由于数据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简单粗暴。