首先呢,这篇文章,也是小弟参考了许多文章,自己整理出来的,有很多不足之处还有待加强,期待各位评论。

>

LNMP 是代表 Linux 系统下的 Nginx、Mariadb、PHP 相结合而构建成的动态网站服务器架构。下面使用 Dockerfile 文件的方式来创建带有 LNMP 架构的 Docker 镜像。

1. 创建工作目录
[root@localhost ~]# mkdir lnmp
[root@localhost ~]# cd lnmp/

2. 创建 Dockerfile 文件
#基础镜像

FROM centos

#作者信息
MAINTAINER join's image for lnmp <12.com>

#配置nginx的yum源

RUN rpm –ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

#初始化RPM数据库(会花一些时间),且安装nginx
RUN rpm --rebuilddb && yum -y install nginx

#修改 nginx 配置文件,使之支持 php
RUN sed -i '/^user/s/nginx/nginx\ nginx/g' /etc/nginx/nginx.conf
RUN sed -i '10cindex index.php index.html index.htm ;' /etc/nginx/conf.d/default.conf
RUN sed -i '30,36s/#//' /etc/nginx/conf.d/default.conf
RUN sed -i '31s/html/\/usr\/share\/nginx\/html/' /etc/nginx/conf.d/default.conf
RUN sed -i '/fastcgi_param/s/scripts/usr\/share\/nginx\/html/' /etc/nginx/conf.d/default.conf

#安装 mariadb 和 php

RUN rpm --rebuilddb && yum -y install mariadb-server mariadb-devel mariadb php-mysql php php-fpm

#修改php-fpm配置文件
RUN sed -i '/^user/s/apache/nginx/g' /etc/php-fpm.d/www.conf
RUN sed -i '/^group/s/apache/nginx/g' /etc/php-fpm.d/www.conf

#声明Mariadb的用户以及密码等变量

ENV MARIADB_USER root
ENV MARIADB_PASS 123456

#使支持中文

ENV LC_ALL en_US.UTF-8

#这两个脚本下面会有详细说明
ADD db_init.sh /root/db_init.sh
RUN chmod 775 /root/db_init.sh
RUN /root/db_init.sh
ADD run.sh /root/run.sh
RUN chmod 775 /root/run.sh
ADD index.php /usr/share/nginx/html/index.php

#开放的端口

EXPOSE 80

EXPOSE 3306
EXPOSE 443
EXPOSE 9000

#每次创建容器,都会先运行这个脚本
CMD ["/run.sh"]

3.#下面的使数据库初始化操作的脚本

[root@localhost lnmp]# cat db_init.sh
#!/bin/bash
 
mysql_install_db --user=mysql
sleep 3
mysqld_safe &
sleep 3

#涉及到的变量在Dockerfile中都已经声明
mysqladmin -u "$MARIADB_USER" password "$MARIADB_PASS"

#下面是授权命令
mysql -e "use mysql; grant all privileges on *.* to '$MARIADB_USER'@'%' identified by '$MARIADB_PASS' with grant option;"

#这一步应注意下,为什么前面授权了,可以从任何主机来登陆,这里还有授权localhost呢,具体官方资料我也没有查阅,但是和同学探讨之后,应该是"%"这个符号,不包括"local host"和"127.0.0.1"
mysql -e "grant all priviliges on *.* to '$MARIADB_USER'@'localhost' identified by '$MARIADB_PASS';"
h=$(hostname)
mysql -e "use mysql; update user set password=password('$MARIADB_PASS') where user='$MARIADB_USER' and host='$h';"

4.#下面是run.sh脚本

#因为使用systemctl等工具的话,正常情况下是需要加上- -privileged 特殊授权,但是在这里创建镜像中,根本无法使用那个,小弟很苦恼,不知道解决办法,哪位大哥知道可以留言,所有都是用绝对路径启动的哥哥服务

[root@localhost lnmp]# cat run.sh
#!/bin/bash
mysqld_safe && /usr/sbin/nginx  && /usr/sbin/php-fpm

5.#php连接mariadb数据库测试脚本,成功会输出"MySQL is OK"

[root@localhost lnmp]# cat index.php
<?php
echo date("Y-m-d H:i:s")."<br />\n";
$link=mysql_connect("localhost","root","123456");
if(!$link) echo "FAILD!";
else echo "MySQL is OK!";
phpinfo();
?>

6.生成镜像

docker build –t centos:lnmp .

7.启动容器并验证

#-P在这里表示随机端口映射,-p可以指定具体端口,-d表示在后台运行,运行/root/run.sh脚本

docker run –d –name lnmp –P centos:lnmp /root/run.sh

#验证端口

docker ps –a

可能不是很适合新手,如果还不够透彻的话,可以加我vx,qy2331390498,备注,博客园-姓名拉群一起聊人生,谈技术.

利用dockerfile制作基于centos7的lnmp镜像(亲测,详细版)的更多相关文章

  1. Dockerfile简介及基于centos7的jdk镜像制作

    Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建m ...

  2. Centos7 使用Dockerfile 制作自己的Dotnetcore程序镜像

    准备Centos7环境及Docker环境 从Docker hub拉取 Microsoft/dotnet 基础镜像(可以使用国内加速) 向Centos7指定目录上传Dotnet Core程序,目录: / ...

  3. 利用.htaccess绑定子域名到子目录(亲测万网可用)

    http://www.xmgho.com/archives/783.html  利用.htaccess绑定域名到子目录,前提你的空间服务器必须支持apache的rewrite功能,只有这样才能使用.h ...

  4. 利用PyInstaller将python代码封装成EXE(亲测可用)

    有些不能成功,有些不全的,下面总结一下,给自己以后看看.   1下载PyInstaller..去官网下载http://www.pyinstaller.org/(我下载的版本)   2不需要安装,解压即 ...

  5. centos7根分区扩容(亲测有效)

    root@haojftest:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos_test2-root 28G 14G 15G % / devtmpfs ...

  6. linux 手动源码安装lnmp(亲测)

    linux 手动源码安装lnmp笔记(亲测)<pre>先安装这2个yum install gccyum install g++</pre><pre>先在linux ...

  7. 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像

    Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...

  8. 利用Dockerfile构建一个基于CentOS 7镜像

    利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像. Dockerfile内容如下: FROM centosMAINTA ...

  9. 基于Dockerfile制作tomcat镜像

    Docker 概述:   在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操 ...

随机推荐

  1. PYTHON 格式字符串中的填充符

    使用 %类型 来填充 常用的有:%s 填充字符串类型:%d 填充 int 类型:这里是沿用了 C语言中 printf() 函数中的格式,更多的信息请查看:完整列表 name = 'tommy' mes ...

  2. linux命令-awk入门

    最近经常查看nginx日志,有时候需要做一些统计分析,于是就想起了awk,学习了就顺便做一个记录. 目录 概述:简单介绍awk背景原理 基本用法:常用到的awk语法 内建变量 综合实例 概述 awk是 ...

  3. 【转载】uCOS系统的思考

    一:  世界潮流,浩浩汤汤,顺之者昌,逆之者亡---孙中山 从80X86到ARM9,再从ARM9到ARM7,平台是越做越简单,但是简单并不是意味着退步,反而是种潮流趋势... 在CISC道路上渐行渐远 ...

  4. 搭建企业级PPTP服务器

    本文收录在企业项目实战系列 一.VPN 介绍 1.介绍 虚拟私人网络(英语:Virtual Private Network,缩写为VPN)是一种常用于连接中.大型企业或团体与团体间的私人网络的通讯方法 ...

  5. tensorflow 1.12.0 gpu + python3.6.8 + win10 + GTX1060 + cuda9.0 + cudnn7.4 + vs2017)

    在安装tensorflow-gpu时,也看过不少的博客,讲得乱七八糟的,也不能这样说,只是每个人安装的环境或需求不一样,因此没有找到一个适合自己的教程去安装tensorflow-gpu版本.当然,入手 ...

  6. tomcat通过一个端口号实现多域名访问

    最近在一个项目中遇到这样的一个场景,在一台服务器一个tomcat一个端口配置多个域名.没想到解决方法这么简单,通过虚拟目录来实现. 修改tomcat安装路径下/conf下的server.xml vim ...

  7. MySQL高可用之组复制(1):组复制技术简介

    MySQL组复制系列文章: MySQL组复制大纲 MySQL组复制(1):组复制技术简介 MySQL组复制(2):配置单主模型的组复制 MySQL组复制(3):配置多主模型的组复制 MySQL组复制( ...

  8. 第一册:lesson twenty five。

    原文:Mrs.smith's kitchen. Mrs.smith's kitchen is small. There is a refrigerator in the kitchen. The re ...

  9. .net core Identity集成IdentityServer(3) 一键登出

    在客户端程序, 我们补充一键登出操作. 使用了idsv之后, 退出的操作需要删除本地cookie, 然后去请求认证服务器, 也删除认证服务器的cookie. 官网给的退出的代码 public asyn ...

  10. 操作数据库出现InvalidOpertionException(内部连接致命错误)

    用DataTables时并发访问量较大,单个任务操作(获取数据)时间较长.连接数过多的时候就出现InvalidOpertionException错误.知道哪里有问题那就好办了,对GetDataTabl ...