利用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,备注,博客园-姓名拉群一起聊人生,谈技术.

原文地址:https://www.cnblogs.com/joinbestgo/p/10482325.html

时间: 2024-11-05 19:41:03

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

Dockerfile:制作可ssh登录的镜像

我们先手动制作一个可以ssh登录的容器,然后按照操作步骤编写Dockerfile,用docker build根据Dockerfile创建镜像,最后我们可以用这个镜像来生成可ssh登录的容器了.     一.首先创建一个容器并登入 [[email protected] ~]# docker images centos REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZ

manila image 制作 基于 centos7

一.在openstack上使用centos7 image 创建一个instance 1.创建flavor openstack flavor create --id 8 --ram 1024 --disk 8 --vcpus 1 manila.centos 2.使用flavor 6创建 instance 二.修改镜像 1.安装nfs yum install nfs-utils 2.修改nfs启动服务 systemctl enable rpcbind systemctl enable nfs-ser

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

http://www.xmgho.com/archives/783.html 利用.htaccess绑定域名到子目录,前提你的空间服务器必须支持apache的rewrite功能,只有这样才能使用.htaccess.如果你的空间是Linux服务器 一般默认都开启了的. 绑定域名 登陆域名管理台(如DNSPod) 把需要绑定的域名 解析到你的空间:登陆虚拟主机/空间管理台(如万网) 绑定域名到空间; 首先在本地建个txt文件,复制下面的代码修改替换你要绑的域名和目录,并传到网站主目录下再改成为.ht

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

[email protected]:~# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos_test2-root 28G 14G 15G 48% / devtmpfs 1.9G 0 1.9G 0% /dev /dev/xvda1 497M 267M 231M 54% /boot fdisk -l 已经可以看到新磁盘/dev/sdb. 对新磁盘进行分区: # fdisk /dev/sdb 在fdisk的交互模式中,依次输入: n --创建新分区 p --

ansible 部署基于centos7+docker+nginx+openssl+v2版私有仓库

ansible 部署基于centos7+docker.1.12+nginx+openssl+v2版私有仓库 1.申请域名证书不做详细教程网络上很多 2.ansible-playbook 结构 . ├── hosts # 需要安装服务器IP地址 ├── roles │   ├── docker │   │   ├── defaults │   │   ├── files │   │   │   └── dockerkey #证书 文件加 │   │   │       ├── domain.crt

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

Dockerfile内容如下: FROM centos MAINTAINER Victor [email protected] WORKDIR /root RUN rm -f /etc/yum.repos.d/* RUN echo '[BASE]' > /etc/yum.repos.d/base.repo RUN echo 'name=base' >> /etc/yum.repos.d/base.repo RUN echo 'baseurl=http://192.168.244.132/

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

利用Dockerfile构建一个基于CentOS 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像. Dockerfile内容如下: FROM centosMAINTAINER Victor [email protected]WORKDIR /rootRUN rm -f /etc/yum.repos.d/*RUN  echo '[BASE]' > /etc/yum.repos.d/base.repoRUN  echo 'name=base' >> /etc

基于Dockerfile制作tomcat镜像

Docker 概述: ??在前面的例子中,我们从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让 docker 读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile 就此诞生了 常用参数: FROM 命令.用法, FROM <image>:<tag>. FROM 命令告诉 docker 我们构建的镜像是以哪个(发行版)镜像为基础

trove 基于 centos7 制作 mysql5.5 镜像

本文档是手动制作mysql5.5的trove镜像 openstack版本为newton 1.创建基础虚拟机 登录openstack创建一台虚拟机,这台虚拟机用于制作trove镜像,虚拟机的根磁盘最终会上传到glance给trove使用,虚拟机的根磁盘容量根据需要设置,这里略掉这步的详细操作. 以下操作皆登录到这台虚拟机中操作 2. 配置ssh cat /etc/ssh/sshd_config UseDNS no 3.添加mysql源 yum install http://dev.mysql.co