• 利用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 /> ";
    $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

    image

    image

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

  • 相关阅读:
    【线段树】【积累】主席树杂题积累 2016CCPC长春K SequenceII
    【积累】最小不能表示正整数 (以及一些做法
    【字符串】回文树&&回文自动机PAM
    【字符串】后缀自动机SAM
    【字符串】AC自动机
    【字符串】Trie树
    StringUtils类中isEmpty与isBlank的区别
    【Git】pull遇到错误:error: Your local changes to the following files would be overwritten by merge:
    jsp 与jstl
    listener 作用
  • 原文地址:https://www.cnblogs.com/jojoword/p/10482325.html
Copyright © 2020-2023  润新知