使用Dockerfile一键部署lnmp环境

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 使用Dockerfile一键部署lnmp环境,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

前言

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

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!