Docker快速搭建LNMP环境
一、使用Dockerfile制作镜像
前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像,这样类似于快照制作镜像的方式尽管操作还算比较简单,但是当生产环境规模增大,配置变得越来越复杂后,就会显得很臃肿很笨拙。所以下面使用Docker搭建LNMP介绍另一种最为普遍最为常用的容器镜像制作方式——Dockerfile。
1.制作nginx镜像
编辑Dockerfile文件,Dockerfile文件的文件名可以是自定义,但首字母一定要大写:
FROM centos:latest
LABEL AUTHER="AM"
ENV NGX_VERSION="nginx-1.14.2" \
WEB_ROOT="/data/nginx/html" \
WEB_PORT="" \
PHP_ROOT="/var/www/html" \
PHP_IP="172.19.0.4"
ADD $NGX_VERSION.tar.gz /tmp/nginx/
RUN yum makecache \
&& yum install -y gcc gcc-c++ make openssl-devel pcre-devel \
&& mkdir -p /data/nginx/ \
&& cd /tmp/nginx/$NGX_VERSION/ \
&& ./configure --prefix=/data/nginx/ \
&& make \
&& make install \
&& yum remove -y gcc gcc-c++ make \
&& rm -rf /data/nginx/conf/nginx.conf \
&& yum clean all \
&& rm -rf /tmp/nginx/
COPY nginx.conf /data/nginx/conf/
WORKDIR /data/nginx
EXPOSE
CMD ["./sbin/nginx","-g","daemon off;"]
Nginx镜像目录树:
/root/image/
├── Dockerfile
├── index.html
├── nginx-1.14..tar.gz
├── nginx.conf
生成镜像:
docker build -t selfnginx:v0. ./
创建搭建LNMP的专用网络连接,使容器之间能在同一网络名称空间通信,(要注意的是,要使容器间通信不仅可以创建新的网络连接,还可以使用 --link 选项):
docker network create lnmp
启动Nginx容器:
docker container run --name nginx-lnmp -it \
--network lnmp -p 80:80 --rm -v \
/data/nginx/html:/data/nginx/html nginx-lnmp:latest
2.制作并启动PHP镜像
PHP7.2Dockerfile托管在Github上,制作方法和Nginx相同。启动容器:
docker container run --name php -it --network lnmp -\
-rm -v /data/nginx/html:/var/www/html \
php-fpm7.:latest
在Nginx与PHP建立连接时有一个坑,在Nginx+PHP中通用配置如下:
location ~ .php$ {
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
在通常的非Docker场景中这样配置是没有问题的,但是在Docker场景下使用 $document_root 会出现报错: FastCGI sent in stderr: "Primary script unknown" ,打开php页面时会提示 file not found 。这是由于PHP容器化后PHP的工作目录并不是默认的 $document_root ,所以必须使用容器镜像事先所指定的路劲,我这里的路径是 /var/www/html ,所以要将 $document_root 替换为 /var/www/html 。
3.制作并运行MariaDB镜像
MariaDB的Dockerfile地址也托管在github上。我这里没有制作镜像,直接使用的是官方的公共Docker镜像→链接。
在启动MariaDB时,要指定初始化的环境变量:MYSQL_ROOT_PASSWORD MYSQL_DATABASE、MYSQL_USER、MYSQL_PASSWORD等,其中必须的是 MYSQL_ROOT_PASSWORD :
docker container run --name mariadb -it \
-p : --network lnmp \
-v /data/mysql:/var/lib/mysql --rm \
-e MYSQL_ROOT_PASSWORD=root -e MYSQL_USER=mysql \
-e MYSQL_PASSWORD= \
-e MYSQL_DATABASE=wptest mariadb:10.2.
4.注意事项
除了上述Nginx配置问题外,还要注意Nginx和PHP的数据路径必须挂载在同一位置。检测PHP是否可与MariaDB正常通信,可使用:
<?php
$mysqli = new mysqli("localhost", "root", "password");
if(!$mysqli) {
echo"database error";
}else{
echo"php env successful";
}
$mysqli->close();
?>
Docker快速搭建LNMP环境的更多相关文章
- spring boot / cloud (十八) 使用docker快速搭建本地环境
spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...
- 使用Docker快速搭建ELK环境
今天由于Win系统的笔记本没带回家,其次Docker在非Linux系统下都需要安装额外的软件去镜像才行 所以感觉没有差别,先直接用Mac搭建一遍呢, 本篇部分命令和配置内容为摘抄 Mac下使用Dock ...
- 阿里云体验实验室 教你如何《快速搭建LNMP环境》
## 体验平台简介 面向开发者和中小企业打造的一站式.全云端的开发平台,打开浏览器就可以开发.调试.上线,所测即所得,并结合无服务器的模式,重新定义云原生时代的研发工作方法论.旨在降低开发者上手成本和 ...
- Docker: 快速搭建LNMP网站平台
快速搭建LNMP网站平台 步骤: 1.自定义网络(这里建立一个自定义网络,名字叫 lnmp, 让LNMP网站的服务,都加入这个自定义网络)docker network create lnmp2.创建M ...
- 烂泥:学习ubuntu之快速搭建LNMP环境
本文由秀依林枫提供友情赞助,首发于烂泥行天下 现在公司使用的都是ubuntu系统,这几天由于个别项目需要,需要搭建一个LNMP环境.为了快速搭建这个环境,我使用是apt-get方式进行安装.具体的操作 ...
- 使用docker快速搭建hive环境
记录一下使用docker快速搭建部署hive环境 目录 写在前面 步骤 安装docker 安装docker 安装docker-compose 配置docker国内镜像源(可选) 安装git & ...
- 使用docker快速搭建本地环境
在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越来越多. 然而要顺利的安装好这些中间件也是一个比较费时费力的工作. 俗话说" ...
- 小白简单快速搭建lnmp环境(centos7)
本来想着自己搭建lnmp,由于php包下载不下来因此这次本人使用的lnmp一键包搭建的环境(很遗憾还没有php7.3.5)很详细并且方便快捷网址https://lnmp.org/install.htm ...
- 烂泥:学习centos之快速搭建LNMP环境
本文由秀依林枫提供友情赞助,首发于烂泥行天下 以前在centos下安装软件都是喜欢源码安装,不过昨天因为一个事情需要一个centos 下的LNMP环境.反倒不会搞了,今天特意记录下,以备后续使用. 一 ...
随机推荐
- redux 与 react-redux
Redux 一.Redux 三大原则: 1.一个应用永远只有一个数据源(整个应用状态都保存在一个对象中,Redux提供的工具函数combineReducers可以解决庞大的数据对象的问题) 2.状态是 ...
- 继承ipkPlayer中出现的一些错误汇总
1.下载完ffmpeg后,我们再在终端执行下面两个命令: cd ios./compile-ffmpeg.sh clean./compile-ffmpeg.sh all 大体流程如下 这里如果出现 x ...
- mybatis3源码阅读之SqlSessionFactoryBuilder
/** 构造器,根据配置或者代码生成SqlSessionFactory,采用分布构建的Builder模式 /* public class SqlSessionFactoryBuilder { /** ...
- 【安富莱】【RL-TCPnet网络教程】第11章 RL-TCPnet调试方法
第11章 RL-TCPnet调试方法 本章节为大家讲解RL-TCPnet的调试方法,RL-TCPnet的调试功能其实就是通过串口打印实时监控运行状态.而且RL-TCPnet的调试设置比较简单 ...
- [Swift]LeetCode873. 最长的斐波那契子序列的长度 | Length of Longest Fibonacci Subsequence
A sequence X_1, X_2, ..., X_n is fibonacci-like if: n >= 3 X_i + X_{i+1} = X_{i+2} for all i + 2 ...
- [Swift]LeetCode876. 链表的中间结点 | Middle of the Linked List
Given a non-empty, singly linked list with head node head, return a middle node of linked list. If t ...
- [Swift]LeetCode1004. 最大连续1的个数 III | Max Consecutive Ones III
Given an array A of 0s and 1s, we may change up to K values from 0 to 1. Return the length of the lo ...
- linux字符测试以及for循环
1.字符测试 常用的测试字符的命令: == .=都表示测试字符相等,格式为[ A = B ]需要注意的是变量与等号之间需要有空格,不然测试的结果不正确示例如下 若字符与等号不加空格,假设变量A=ab ...
- 细说javascripe事件传播流程
当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...
- scala转换date提取年月日时分秒
从数据库提取出来的时间为 String 格式,现在需要转换为 date 并提取出里面的 小时 时间段: import java.text.SimpleDateFormat import java.ut ...