利用dockerfile制作基于centos7的lnmp镜像(亲测,详细版)
首先呢,这篇文章,也是小弟参考了许多文章,自己整理出来的,有很多不足之处还有待加强,期待各位评论。
>
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镜像(亲测,详细版)的更多相关文章
- Dockerfile简介及基于centos7的jdk镜像制作
Dockerfile简介 dockerfile 是一个文本格式的配置文件, 用户可以使用 Dockerfile 来快速创建自定义的镜像, 另外,使用Dockerfile去构建镜像好比使用pom去构建m ...
- Centos7 使用Dockerfile 制作自己的Dotnetcore程序镜像
准备Centos7环境及Docker环境 从Docker hub拉取 Microsoft/dotnet 基础镜像(可以使用国内加速) 向Centos7指定目录上传Dotnet Core程序,目录: / ...
- 利用.htaccess绑定子域名到子目录(亲测万网可用)
http://www.xmgho.com/archives/783.html 利用.htaccess绑定域名到子目录,前提你的空间服务器必须支持apache的rewrite功能,只有这样才能使用.h ...
- 利用PyInstaller将python代码封装成EXE(亲测可用)
有些不能成功,有些不全的,下面总结一下,给自己以后看看. 1下载PyInstaller..去官网下载http://www.pyinstaller.org/(我下载的版本) 2不需要安装,解压即 ...
- centos7根分区扩容(亲测有效)
root@haojftest:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos_test2-root 28G 14G 15G % / devtmpfs ...
- linux 手动源码安装lnmp(亲测)
linux 手动源码安装lnmp笔记(亲测)<pre>先安装这2个yum install gccyum install g++</pre><pre>先在linux ...
- 利用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 ...
- 利用Dockerfile构建一个基于CentOS 7镜像
利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像. Dockerfile内容如下: FROM centosMAINTA ...
- 基于Dockerfile制作tomcat镜像
Docker 概述: 在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操 ...
随机推荐
- Unity3D热更新之LuaFramework篇[03]--prefab加载和Button事件
在上一篇文章 Unity3D热更新之LuaFramework篇[02]--用Lua创建自己的面板 中,我介绍了LuaFramework加载面板的方法,但这个方法并不适用于其它Prefab资源,在这套框 ...
- Win32之内存管理之虚拟内存跟物理内存
Win32之内存管理 一丶虚拟内存和物理内存 我们知道每个应用程序都有自己独立的4GB空间. 假设A进程的 地址123 存储了10 那么B进程的123地址 存储了20 那么它们两个是互不影响的. ...
- 接口隔离原则(ISP)
设计应用程序的时候,如果一个模块包含多个子模块,那么我们应该小心对模块做出抽象.设想该模块由一个类实现,我们可以把系统抽象成一个接口.但是要添加一个新的模块扩展程序时,如果要添加的模块只包含原系统中的 ...
- Ubuntu 安装网卡驱动
搭建Linux平台的无线热点,需要无线网卡和驱动都要支持 AP. 试了下Ubuntu平台默认驱动并不支持AP模式,所以需要更换驱动,具体操作步骤如下: 1.找到自己网卡芯片的型号,由于我的环境是搭建在 ...
- LeetCode算法扫题系列19
原创作品,可以转载,但是请标注出处地址:https://www.cnblogs.com/V1haoge/p/9104677.html LeetCode算法第19题(难度:中等) 题目:给定一个链表,删 ...
- IFS简单说明
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html bash下的很多命令都会分割单词,绝大多数时候默认是采用空格作 ...
- Spring Boot入门(12)实现页面访问量统计功能
在日常的网站使用中,经常会碰到页面的访问量(或者访问者人数)统计.那么,在Spring Boot中该如何实现这个功能呢? 我们的想法是比较简单的,那就是将访问量储存在某个地方,要用的时候取出来 ...
- Python爬虫之使用Fiddler+Postman+Python的requests模块爬取各国国旗
介绍 本篇博客将会介绍一个Python爬虫,用来爬取各个国家的国旗,主要的目标是为了展示如何在Python的requests模块中使用POST方法来爬取网页内容. 为了知道POST方法所需要传 ...
- 【转载】 IIS服务器防盗链设置
在实际运行的服务器环境中,我们自己网站中的资源一般不希望被外部网站引用,被外部网站引用IIS网站中的资源文件,一是会加重了服务器的负担,二是占用了你自己服务器的外网带宽资源,因此我们希望防止盗链这种情 ...
- Java集合类源码解析:AbstractMap
目录 引言 源码解析 抽象函数entrySet() 两个集合视图 操作方法 两个子类 参考: 引言 今天学习一个Java集合的一个抽象类 AbstractMap ,AbstractMap 是Map接口 ...