前言
之前文章写过使用docker配置lnmp环境,但都是分别拉取nginx,php-fpm,mysql等镜像,分别run后,用端口互通,->传送门<-。
这次来试下,运行一个容器把所有功能都搞定,会用到dockerfile,最好事先了解下,不了解也没关系,照着敲一遍命令就好。
1. 创建网站项目根目录
[root@localhost ~]# mkdir /var/www/html/tp6
[root@localhost ~]# echo '<?php echo “hello world”; ?>' > /var/www/html/tp6/index.php
2. 在用户目录创建lnmp文件夹并进入
后续文件都创建在此文件夹中
[root@localhost ~]# mkdir ~/lnmp && cd ~/lnmp
3.创建Dockerfile文件
这里会用到一个叫alpine的镜像,就是一个轻量级的linux发行版,只有约5M,我们lnmp的服务都是装在这里面,相当于我们在跑一个微型的linux系统,并在里面安装了nginx,php-fpm和mysql服务,
注意:里面的RUN命令是通过&&连接的,因为每一个run都会生成一层,所以尽量只run一次
[root@localhost lnmp]# vi Dockerfile
#安装服务和扩展
FROM alpine:3.13
RUN apk update \
&& apk add php7 nginx \
&& apk add curl bash \
&& apk add php7-mysqli php7-pdo_mysql php7-mbstring php7-json php7-zlib php7-gd php7-intl php7-session php7-fpm php7-redis php7-curl php7-posix php7-fileinfo php7-simplexml \
&& apk add php7-tokenizer php7-ctype php7-bcmath php7-openssl php7-dom php7-iconv php7-zip php7-pcntl php7-xmlwriter \
&& mkdir /run/nginx \
&& touch /run/nginx/nginx.pid \
&& mkdir /var/www/tp6
#复制配置文件和网站目录
COPY default.conf /etc/nginx/conf.d/default.conf
COPY run.sh /run.sh
# 若使用root权限启动php, 修改最大子进程数且一次性分配, 需修改配置如下
# 若使用root权限启动nginx, 开启gzip压缩, 需修改配置如下
RUN sed 's/user = nobody/user = root/g' /etc/php7/php-fpm.d/www.conf | sed 's/group = nobody/group = root/g' | sed 's/pm.max_children = 5/pm.max_children = 30/g' | sed 's/pm = dynamic/pm = static/g' > /tmp/www.conf \
&& mv /tmp/www.conf /etc/php7/php-fpm.d/www.conf \
&& sed 's/user nginx;/user root;/g' /etc/nginx/default.conf | sed 's/#gzip on;/gzip on;/g' > /tmp/default.conf \
&& mv /tmp/default.conf /etc/nginx/default.conf \
&& chmod -R 777 /run.sh
#调用守护进程
CMD ["/run.sh"]
4.创建default.conf文件
[root@localhost lnmp]# vi default.conf
server {
listen 8888;
root /var/www/tp6;
index index.html index.htm index.php;
location / {
if ($request_method = 'OPTIONS') {
return 204;
}
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
location ~ /\.ht {
deny all;
}
}
5.创建run.sh脚本
nginx的守护进程,隔一段时间判断一次是不是挂了,挂了就重启
[root@localhost lnmp]# vi run.sh
#!/bin/sh
# Start php and nginx
while :
do
runningPHP=$(ps -ef |grep "php-fpm" |grep -v "grep" | wc -l)
if [ "$runningPHP" -eq 0 ] ; then
echo "PHP service was not started. Startting now."
/usr/sbin/php-fpm7 -R
fi
runningNginx=$(ps -ef |grep "nginx" |grep -v "grep" | wc -l)
if [ "$runningNginx" -eq 0 ] ; then
echo "Nginx service was not started. Startting now."
/usr/sbin/nginx
fi
sleep 60
done
6.运行Dockerfile文件生成镜像
整合刚才创建的文件,生产一个名为lnmp,版本号位v1的镜像,
最后的.号别忘了,代表上下文目录
[root@localhost lnmp]# docker build -t lnmp:v1 .
7.使用lnmp运行容器
映射8888端口(如想使用80端口,还需要把上面default.conf里的端口改成80),映射网站目录(修改项目文件无需进入容器)
[root@localhost lnmp]# docker run -d -p 8888:8888 -v /var/www/html:/var/www --name lnmp lnmp:v1
52b55d98490b7ac455e3aec453549ea530fc564a201e8855b78abb226ba22082
访问测试
原创不易,转载请注明来源
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/134005.html