使用Dockerfile一键部署lnmp环境

18 篇文章 0 订阅
15 篇文章 1 订阅
前言

之前文章写过使用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



访问测试

在这里插入图片描述




原创不易,转载请注明来源

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值