Docker基础23--4.4综合实验:基于docker的LNMP WEB服务及应用

4.4综合实验:基于docker的LNMP WEB服务及应用

4.4.1 LNMP概念

LNMP动态网站部署架构是一套由Linux + Nginx + MySQL + PHP组成的动态网站系统解决方案(其各自的Logo见图20-1)。LNMP中的字母L是Linux系统的意思,不仅可以是RHEL、CentOS、Fedora,还可以是Debian、Ubuntu等系统。

4.4.1部署的思路

架构:创建两个容器,一个容器跑nginx+PHP,一个容器跑mysql,网站数据和数据库数据都存放在宿主机上。在nginx上跑一个wordpress,用于博客网站的架设。

安装方式

mysql就使用我们上一节中创建好的镜像来实现;

nginx使用yum安装;

PHP通过使用源码包生成rpm安装包,再进行安装;

wordpress只需要将安装包拷贝到nginx目录下即可。

4.4.2 需要准备的资源

1)Centos 8 dnf源

wgethttps://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

  1. PHP源码包

wget https://www.php.net/distributions/php-7.4.28.tar.gz

3)wordpress 安装包

wget https://cn.wordpress.org/latest-zh_CN.tar.gz

  1. 编辑一个nginx配置文件nginx.conf

    server {

        listen       80 default_server;

        listen       [::]:80 default_server;

        server_name  _;

        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.

        include /etc/nginx/default.d/*.conf;

#以下部分是定义根目录,和index文件

location / {

        root html;

        index  index.php index.html index.htm;

        }

#以下部分红色字体是用于nginxphp模块的连接

        location ~ \.php$ {

        root           html;

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php;

        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

        include        fastcgi_params;

        }

        location = /favicon.ico {

        log_not_found off;

        access_log off;

        }

        error_page 404 /404.html;

            location = /40x.html {

        }

        error_page 500 502 503 504 /50x.html;

            location = /50x.html {

        }

    }

4.4.3编写dockerfile

vim dockerfile-lnmp

FROM centos:latest#定义镜像来源基础包

LABEL auto build lnmp  #定义一个镜像标签

EXPOSE 80#定义开放的端口号

COPY ./Centos-vault-8.5.2111.repo /tmp/Centos-vault-8.5.2111.repo#将国内yum源文件拷入镜像

COPY ./lnmp_entrypoint.sh /root/lnmp_entrypoint.sh#将容器启动脚本拷入镜像

COPY ./nginx.conf /tmp/nginx.conf #nginx配置文件拷入镜像

COPY ./php7.4/php-7.4.28.tar.gz /tmp/php-7.4.28.tar.gz#PHP源码包拷入镜像

COPY ./wordpress/latest-zh_CN.tar.gz /tmp/latest-zh_CN.tar.gz#wordpress源码包拷入镜像

RUN chmod 755 /root/lnmp_entrypoint.sh \#将启动脚本设为可执行

&& ln -s /root/lnmp_entrypoint.sh /usr/bin/lnmp_entrypoint.sh \#将启动脚本软链接到系统目录

&& rm -rf /etc/yum.repos.d/* \#删除原有yum

&& mv /tmp/Centos-vault-8.5.2111.repo /etc/yum.repos.d/ \#将国内yum源文件拷到yum配置目录

&& dnf makecache \ #重建yum缓存

&& dnf install 'dnf-command(config-manager)' -y\ #安装dnf插件

&& dnf config-manager --set-enabled PowerTools -y\#开启PowerTools

&& dnf makecache #重建yum缓存

RUN dnf install gcc libxml2-devel sqlite-devel libcurl-devel oniguruma-devel make -y \#安装依赖包

&& dnf install nginx -y \#安装nginx

&& rm -rf /var/cache/yum/* #清除yum缓存

RUN cd /tmp \

&& tar -xzf php-7.4.28.tar.gz \#解压缩php源码包

&& cd /tmp/php-7.4.28 \

&& ./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-curl --with-pdo_mysql --with-pdo_sqlite --enable-mysqlnd --enable-mbstring \ #配置PHP编译环境

&& make install \#编译及安装PHP

&& ln -s /usr/local/php/sbin/php-fpm /usr/sbin/php-fpm \#软链接php启动程序到系统目录

&& cp /tmp/php-7.4.28/php.ini-development /usr/local/php/lib/php.ini \#生成php配置文件1php.ini

&& mv /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf \ #生成php配置文件2php-fpm.conf

&& mv /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf#生成php配置文件3www.conf

RUN rm -f /etc/nginx/nginx.conf \#删除原有nginx配置文件

&& mv /tmp/nginx.conf /etc/nginx/ \#将配置好的nginx文件拷贝到nginx配置目录

&& rm -rf /usr/share/nginx/html/* \ #删除原有nginx html文件

&& cd /tmp \

&& tar -xzf latest-zh_CN.tar.gz \#解压缩wordpress源码包

&& rm -r latest-zh_CN.tar.gz #删除wordpress源码包

CMD lnmp_entrypoint.sh;sleep infinity#执行启动脚本,并让启动脚本常驻内存。

4.4.4编写lnmp_entrypoint文件

vim lnmp_entrypoint

#!/bin/bash

    mv /tmp/wordpress/* /usr/share/nginx/html/#wordpress文件移入nginx html目录

    cp /usr/share/nginx/html/wp-config-sample.php /usr/share/nginx/html/wp-config.php

#生成wordpress配置文件:wp-config.php

    chown -R nginx:nginx /usr/share/nginx #设置nginx目录的拥有者为nginx用户

    sed -i "s/database_name_here/$DATABASE_NAME/g" /usr/share/nginx/html/wp-config.php

#配置wp-config.php中的数据库名称为变量$DATABASE_NAME的值,此变量的值在创建容器时由用户自定义。

    sed -i "s/username_here/$DATABASE_USER/g" /usr/share/nginx/html/wp-config.php

#配置wp-config.php中的数据库用户名为变量$DATABASE_USER的值,此变量的值在创建容器时由用户自定义。

    sed -i "s/password_here/$DATABASE_PASSWORD/g" /usr/share/nginx/html/wp-config.php

#配置wp-config.php中的数据库密码为变量$DATABASE_PASSWORD的值,此变量的值在创建容器时由用户自定义。

    sed -i "s/localhost/$DATABASE_ADDRESS/g" /usr/share/nginx/html/wp-config.php

#配置wp-config.php中的数据库地址为变量$DATABASE_ADDRESS的值,此变量的值在创建容器时由用户自定义。

    php-fpm#启动php服务

    nginx #启动nginx服务

4.4.5创建lnmp镜像

在dockerfile文件的目录中执行以下命令:

docker build -t lnmp -f dockerfile-lnmp .#使用dockerfile-lnmp这个dockerfile来创建一个名为lnmp的镜像

 

 

4.4.6创建数据库

在4.3小节里创建好的mysql容器中,创建一个名为wordpress的数据库。

mysql -h 172.17.0.5 -u root –p   #进入mysql系统,命令的中IP地址,是mysql容器的地址。

 

创建一个数据库

create database wordpress;

使用“show databases;”命令查看数据库是否已创建成功;

 

4.4.7创建并启动容器

docker run -d \

> --name lnmp \ #定义容器名称

> --hostname lnmp \#定义容器系统主机名

> -p 80:80 \#将宿主机的80端口映射到容器的80端口

> -e DATABASE_NAME='wordpress' \#定义DATABASE_NAME变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库名称。

> -e DATABASE_USER='root' \#定义DATABASE_USER变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库用户名。

> -e DATABASE_PASSWORD='123qweASD!@#' \#定义DATABASE_PASSWORD变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库密码。

> -e DATABASE_ADDRESS='172.17.0.5' \#定义DATABASE_ADDRESS变量,此变量将被带入容器,并通过lnmp_entrypoint.sh启动脚本写入wordpress的配置文件中,作为wordpress使用的数据库地址。

> -v /root/dockerlab/lnmp/html:/usr/share/nginx/html \#将主机中的一个目录映射到容器中的nginx html目录,作为wordpress的数据目录

> lnmp:latest#使用的镜像名称(就是4.4.5中创建的镜像)

 

容器创建成功,并已正常运行。

4.4.8配置并测试wordpress

通过web浏览器连接打开wordpress的配置页面,进行配置

http://192.168.0.197/wp-admin/setup-config.php #这边的ip地址是宿主机的ip

 

 

输入一些基本信息后,点击安装”wordpress”

 

安装成功,登录系统。

 

这样我们就成功地在容器中安装好了wordpress

wordpress的具体配置和应用,不在我们的教程范围之内,大家有兴趣的话,可以去参考相关的资料。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暮毅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值