注册网站免费注册/三只松鼠口碑营销案例
1、编写mariadb部署配置文件
在文件夹:/mnt/hgfs/dockers/test_site/compose下创建文件:test_site_mariadb.yml,内容如下:
version: "3.5"
services:test_site_mariadb:container_name: test_site_mariadbimage: mariadb:10.3restart: alwaysprivileged: truenetworks:- test_site_networkports:- 3306:3306environment:TIME_ZONE: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: test_site_dbMYSQL_USER: test_site_userMYSQL_PASSWORD: 123456volumes:- /var/test_site/data/mariadb:/var/lib/mysql
# - /mnt/hgfs/dockers/test_site/data/mariadb:/var/lib/mysqlcommand: ['--character-set-server=utf8mb4','--collation-server=utf8mb4_unicode_ci']
networks:test_site_network:name: test_site_network
注意:
- 1)此配置文件将3306端口映射开放给了docker容器所在的centos主机,主要是为了外部mysql客户端可以访问到数据库,如果仅仅是被php容器调用的话,不用映射出来;
- 2)目录绑定部分(volumes配置项),由于 /mnt/hgfs/dockers目录我映射到了windows10的文件系统里,所以在安装docker时,会出现文件冲突的问题,所以就选用了另外的一个目录;
- 3)此文件中网络的名称和nginx、php的docker部署配置文件中网络的名称是相同的,都是:test_site_network
2、部署mariadb
为了便于看到mariadb部署的结果展示,将系统里已安装的镜像删除。在shell里运行以下命令:
cd /mnt/hgfs/dockers/test_site/compose
./uninstall.sh
当然也可以运行下面的命令来完成:
cd /mnt/hgfs/dockers/test_site/compose
docker-compose -f test_site_nginx.yml down
docker-compose -f test_site_php.yml down
运行部署命令:
docker-compose -f test_site_mariadb.yml up -d
即可完成mariadb的部署。
3、测试mariadb数据库
找一个windows版本的mysql数据库管理客户端,有很多可以选择,我使用的是比较简单的开源工具MySQL-Front,做基本的数据库管理,功能完全足够。
MySQL-Front客户端软件的官网:http://www.mysqlfront.de;可以直接去网站下载适用的版本,也可以在百度网盘里下载:https://pan.baidu.com/s/16F_z_7CTr6-tkmStKbB2-Q
MySQL-Front的安装和配置过程很简单,如有问题就网上搜相关文章。
在本例中为了简化,test_site_mariadb.yml里目前设置 root 和 test_site_user 两个用户的密码相同,都为 123456,在mysql客户端连接数据库时,就可以用这个密码。
从上面两张图可以看到,在利用脚本进行安装后,数据库和用户都已建立。并且能查看到 mariadb 里的所有库和表,证明 mariadb 安装成功。
足够简单吧?这也进一步验证了利用 docker 进行系统部署的便捷性。
4、php-fpm连接mariadb数据库
4.1、说明
由于选用的php-fpm版本为:7.2.3,在php7中已经废除了mysql库了,则只能使用mysqli及PDO,本例只对PDO的使用进行配置。所谓对PDO使用的配置,实际上就是必须进入到PHP容器里,安装对PDO的支持扩展。
4.2、编写此阶段安装和卸载docker容器的临时脚本
注意顺序:安装顺序为mariadb、php、nginx,卸载顺序为nginx、php、mariadb
1)安装脚本:install.sh
编辑install.sh文件,内容如下:
#!/bin/bash
#echo ""
echo "安装 mariadb..."
docker-compose -f test_site_mariadb.yml up -d
echo "mariadb 安装结束!"
#echo ""
echo "安装 php..."
docker-compose -f test_site_php.yml up -d
echo "php 安装结束!"
echo ""
echo "安装 nginx..."
docker-compose -f test_site_nginx.yml up -d
echo "nginx 安装结束!"
echo ""
修改执行权限:
chmod +x install.sh
2)卸载脚本:uninstall.sh
编辑uninstall.sh文件,内容如下:
#!/bin/bash
echo "卸载 nginx..."
docker-compose -f test_site_nginx.yml down
echo "nginx 卸载完成!"
echo ""
echo "卸载 php..."
docker-compose -f test_site_php.yml down
echo "php 卸载完成!"
echo ""
echo "卸载 mariadb..."
docker-compose -f test_site_mariadb.yml down
echo "mariadb 卸载完成!"
echo ""
service docker restart # 为了保险起见,卸载完成后重启一下docker服务
修改执行权限:
chmod +x uninstall.sh
4.3、测试脚本
cd /mnt/hgfs/dockers/test_site/compose
./uninstall.sh # 卸载
./install.sh # 安装
经测试,发现3个容器都安装上了!
4.4、测试php连接数据库
1)编写测试管理数据库的php文件
编写测试管理数据库的php文件:testdb.php,内容如下:
<?php
$PDO = new PDO('mysql:host=test_site_mariadb;dbname=mysql', 'root', '123456');
var_dump($PDO);
$stmt=$PDO->prepare('select count(*) as userCount from user');
$stmt->execute();
echo '<br>';
echo 'rowCount='.$stmt->rowCount().'<br>';
while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {echo 'userCount='.$row['userCount'].'<br>';
}
?>
2)在浏览器里测试效果
由于目前还没有安装PDO扩展,所以结果可以预见是会失败的。
在浏览器里输入:http://api.test.site/testdb.php;
果然出错了,出错信息如下:
Fatal error: Uncaught PDOException: could not find driver in /var/test_site/www/testdb.php:2 Stack trace: #0 /var/test_site/www/testdb.php(2): PDO->__construct('mysql:host=test...', 'root', '123456') #1 {main} thrown in /var/test_site/www/testdb.php on line 2
3)安装PDO驱动
在shell里运行下面命令:
docker exec -it test_site_php /bin/bash
这样就进入到了 test_site_php 容器里:
在上图的容器shell里运行下面命令进行安装:
cd /usr/local/bin
./docker-php-ext-install pdo_mysql
./docker-php-ext-install mysql
exit
exit会返回到主机的shell,在主机shell里用命令重启php容器:
service docker restart # 为了保险起见,卸载完成后重启一下docker服务
4)再次在浏览器里测试效果
在浏览器里输入:http://api.test.site/testdb.php;
返回结果如下:
testdb.php的功能是查出mysql.user数据表里用户的个数信息,返回结果为1行,用户数为3,和下图MySQL-Front客户端查询的结果对上了。

至此,php-fpm利用PDO连接mariadb数据库成功!
5)进入php-fpm容器后,安装PDO的脚本
cd /mnt/hgfs/dockers/test_site/compose
touch install_pdo_in_container.sh
install_pdo_in_container.sh 该文件名的含义是:在容器(当然是php容器)里安装pdo的脚本,内容为:
#!/bin/bashcd /usr/local/bin
./docker-php-ext-install pdo_mysql
./docker-php-ext-install mysql
exit
记得赋予该文件执行权限:
chmod +x install_pdo_in_container.sh
6)在CentOS主机里自动安装pdo的脚本汇总
至此之前,完成了mariadb的安装,以及pdo的安装,但对于初学者来说,进入容器,再安装pdo,多少有些麻烦,所以还是告诉大家在CentOS主机里直接安装PDO的方法(会用到刚才的 install_pdo_in_container.sh脚本文件)。
步骤为:
- 使用docker cp命令,将install_pdo_in_container.sh文件拷贝到php容器的/vat/test_site目录下,备用
- 使用docker exec命令,在容器里执行install_pdo_in_container.sh脚本,进行pdo驱动安装
- 使用docker restart命令,重启php容器,使pdo驱动生效
shell里运行上述步骤的命令如下:
cd /mnt/hgfs/dockers/test_site/compose
docker cp install_pdo_in_container.sh test_site_php:/var/test_site/. # 将 pdo 安装脚本文件由属主机拷入 php 容器里的/var/test_site目录下
docker exec -i test_site_php bash /var/test_site/install_pdo_in_container.sh # 在 php 容器里运行 pdo 脚本,安装 mysq 的 pdo 驱动
docker restart test_site_php # 重启 php 容器里的 php 服务
5、test_site示例网站一键式安装、卸载脚本
install.sh 内容:
#!/bin/bash#echo ""
#echo "启动站点 test_site 安装..."
#echo ""
echo "安装 mariadb..."
docker-compose -f test_site_mariadb.yml up -d
echo "mariadb 安装结束!"
echo ""
echo "安装 php..."
docker-compose -f test_site_php.yml up -d
echo "php 安装结束!"
echo ""
echo "安装 nginx..."
docker-compose -f test_site_nginx.yml up -d
echo "nginx 安装结束!"
echo ""
echo "往php容器里安装 PDO扩展..."
docker cp install_pdo_in_container.sh test_site_php:/var/test_site/. # 将 pdo 安装脚本文件由属主机拷入 php 容器里的/var/test_site目录下
docker exec -i test_site_php bash /var/test_site/install_pdo_in_container.sh # 在 php 容器里运行 pdo 脚本,安装 mysq 的 pdo 驱动
docker restart test_site_php # 重启 php 容器里的 php 服务
echo "往php容器里安装 PDO扩展结束!"
echo ""
uninstall.sh 内容:
#!/bin/bash#echo ""
#echo "开始卸载站点 test_site..."
#echo ""
echo "卸载 nginx..."
docker-compose -f test_site_nginx.yml down
echo "nginx 卸载完成!"
echo ""
echo "卸载 php..."
docker-compose -f test_site_php.yml down
echo "php 卸载完成!"
echo ""
echo "卸载 mariadb..."
docker-compose -f test_site_mariadb.yml down
echo "mariadb 卸载完成!"
echo ""
echo "重启docker服务...";
service docker restart # 为了保险起见,卸载完成后重启一下docker服务
echo "docker服务重启完成!"
echo ""
使用方法:
cd /mnt/hgfs/dockers/test_site/compose
./uninstall.sh
./install.sh
以上脚本安装、卸载测试成功。请参考!
至此,已经完全实现了Docker搭建一个单一LNMP示例网站的全部操作。
后续将实现单一站点的参数化脚本安装部署,以及一个nginx拖两个站点的安装部署。
上一篇:Docker搭建LNMP环境实战(08):安装php-fpm
下一篇:Docker搭建LNMP环境实战(10):大结局!脚本化一次性安装测试、生产环境
相关文章:

Docker搭建LNMP环境实战(09):安装mariadb
1、编写mariadb部署配置文件 在文件夹:/mnt/hgfs/dockers/test_site/compose下创建文件:test_site_mariadb.yml,内容如下: version: "3.5" services:test_site_mariadb:container_name: test_site_mariadbimage: mari…...

基于Python的微博舆论分析,微博评论情感分析可视化系统,附源码
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

Flutter iOS上架指南
本文探讨了使用Flutter开发的iOS应用能否上架,以及上架的具体流程。苹果提供了App Store作为正式上架渠道,同时也有TestFlight供开发者进行内测。合规并通过审核后,Flutter应用可以顺利上架。但上架过程可能存在一些挑战,因此可能…...

实操:driver.js 实现产品导览、亮点、上下文帮助
官网 https://driverjs.com/ 依赖 <script src"https://cdn.jsdelivr.net/npm/driver.js1.0.1/dist/driver.js.iife.js"></script> <link rel"stylesheet" href"https://cdn.jsdelivr.net/npm/driver.js1.0.1/dist/driver.css"/…...

【JavaWeb】Day29.SpringBootWeb请求响应——请求(二)
请求响应 4.数组集合参数 数组集合参数的使用场景:在HTML的表单中,有一个表单项是支持多选的(复选框),可以提交选择的多个值。 4.1 数组 数组参数:请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即…...

asf是什么格式的文件?用手机怎么打开?
由于手机操作系统和硬件的限制,大部分手机并不直接支持asf文件的播放。因此,如果你想在手机上打开asf文件,你可能需要先将文件转换为手机支持的格式,如MP4。可以通过使用一些视频转换软件来实现,比如野葱视频转换器。 …...

picGo图床搭建gitee和smms(建议使用)
picGoGitee 这个需要下载gitee插件, 因为官方频繁的检索文件类型, 有时候也会失效 如果没有特殊要求平时存个学习的要看图中文字的重要的图片建议就是smms, 免费也够用! 图片存本地不方便, 各种APP中来回传还会失帧损失画质, 所以你值得往下看 picGosmms 建议使用这个, sm…...
LeetCode | 数组 | 二分查找 | 35.搜索插入位置【C++】
题目链接 题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出…...

Linux 给网卡配置ip
ip addr | grep eth9 ifconfig eth9 10.0.0.2 netmask 255.255.255.0 up...

【C语言】翻译环境与运行环境
一、前言 在我们学习C语言的时候,第一个接触的程序就是:在屏幕上打印” hello word! “,可当时的我们却未去深入的理解与感悟,一个程序代码是如何运行的;而这一期的博客,则是带着我们,通过C代码…...

ubuntu20.04执行sudo apt-get update失败的解决方法
参考:执行sudo apt-get update失败的解决方案 1、换源型错误 (1)编辑/etc/apt/sources.list文件 在命令行中输入: sudo vim /etc/apt/sources.list 或者 sudo gedit /etc/apt/sources.list 推荐使用后者 (2…...

接口调用成功后端却一直返回404
vuespringboot 我在vue.config.js中配置了向后端的反向代理 然后使用了axios向后端发送post请求 可以看到可以接收到前端传来的值 但是前端控制台却报了 “xhr.js:245POST http://localhost:7777/api/login 404 (Not Found)” 最后询问我那智慧的堂哥... ... 解决办法是把C…...

【Vmware】 debian 12 安装教程
1.前提说明 VMware 17.5.1 (自行安装),参考Debian 12maven 3.8.7git 2.39.2jdk 1.8 / 11 / 17 1.1.Debian 下载 访问(https://www.debian.org/download) 下载 Debian 这是 Debian 12,代号为 bookworm,网络安装,用于 64 位 PC&a…...

YooAssets 使用相关
## 使用 YooAssets 动态加载原生文件时候 > 原生文件:txt;json;等需要直接保存文件内string字符的文件 需要将打包方式设置成为,PackRawFile 并且加载时候使用 API : YooAssets.LoadRawFileSync()YooAssets.LoadRa…...

精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)
精准扶贫管理系统目录 目录 基于Springboot的精准扶贫管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)用户信息管理 (2)贫困户信息管理 (3)新闻类型管理 &a…...

Flutter与iOS和Android原生页面交互
一、Flutter 与原生页面交互的重要性和应用场景 Flutter 是一个由 Google 开发的开源框架,用于创建跨平台的移动、Web 和桌面应用程序。Flutter 允许开发者使用一套代码库为 Android 和 iOS 等平台构建美观、高性能的应用程序。然而,尽管 Flutter 提供了…...

Chrome安装Vue插件vue-devtools
直接通过网站: Home | Vue Devtools (vuejs.org) chrome扩展商城中搜索:Vue.js devtools 参考下面edge扩展商城的图,两者流程相近...

内存和网卡压力测试
1.内存压力测试 1.1测试目的 内存压力测试的目的是评估开发板中的内存子系统性能和稳定性,以确保它能够满足特定的应用需求。开发板通常用于嵌入式系统、物联网设备、嵌入式智能家居等场景,这些场景对内存的要求通常比较高。 其内存压力测试的主要目的…...

法律行业案例法模型出现,OPenAI公布与法律AI公司Harvey合作案例
Harvey与OpenAl合作,为法律专业人士构建了一个定制训练的案例法模型。该模型是具有复杂推理广泛领域知识以及超越单一模型调用能力的任务的AI系统,如起草法律文件、回答复杂诉讼场景问题以及识别数百份合同之间的重大差异。 Harvey公司由具有反垄断和证…...

详解Qt网络编程
Qt的网络编程能力非常强大,它提供了从底层socket API到高层HTTP、FTP等协议处理的完整解决方案。下面将简要介绍Qt中网络编程的核心类及其功能,并给出一些基本的使用示例。 核心网络类: QTcpSocket 和 QTcpServer QTcpSocket 是用于TCP通信的…...

docker版Elasticsearch安装,ik分词器安装,用户名密码配置,kibana安装
1、安装es和ik分词器 创建映射目录并赋予权限: mkdir -p /docker_data/elasticsearch/conf mkdir -p /docker_data/elasticsearch/data mkdir -p /docker_data/elasticsearch/plugins chmod -R 777 /docker_data/elasticsearch编写配置文件: vi /dock…...

Python中的Requests库:HTTP请求的简单之道
目录 一、安装Requests库 二、发送请求 2.1 GET请求 2.2 POST请求 2.3 其他HTTP方法 三、处理响应 3.1 状态码 3.2 响应内容 3.3 自定义请求头 3.4 更多响应对象属性和方法 四、错误处理 五、高级请求 5.1 会话对象 5.2 SSL证书验证 5.3 设置代理 Http/Https代…...

[RK3566-Android11] 关于 a2dpsink -蓝牙支持接收播放/无PIN码连接
问题描述 1.蓝牙支持接收播放 2.蓝牙支持无PIN码连接(不需要弹出pin配对码请求弹窗) 3.蓝牙支持播放歌曲信息并应用层获取 解决方案: 1.a2dpsink-蓝牙需要支持接收播放补丁 1、device/rockchip/common/overlay/overlay/packages/apps/Blue…...

玩机进阶教程-----高通9008线刷XML脚本修改备份 檫除的操作步骤解析
在高通9008官方固件中我们可以看到刷写需要的脚本rawprogram0.xml和辅助脚本patch0.xml,脚本的作用在于将固件内各个分区对应写入手机内。根据分区地址段。然后判断脚本中那些分区不写入。以下步骤将分析emmc字库为例来讲解如何将默认刷入脚本修改为备份 檫除脚本。…...

前端路径问题总结
1.相对路径 不以/开头 以当前资源的所在路径为出发点去找目标资源 语法: ./表示当前资源的路径 ../表示当前资源的上一层路径 缺点:不同位置,相对路径写法不同2.绝对路径 以固定的路径作为出发点作为目标资源,和当前资源所在路径没关系 语法:以/开头,不同的项目中,固定的路径…...

YOLOv8改进 | 低照度检测 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)
一、本文介绍 本文给大家带来的2024.3月份最新改进机制,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络,CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下…...

python的pip如何升级
升级pip的方法如下: 打开命令行工具。在Windows系统中,可以通过按下WinR键,然后输入"cmd"来打开命令提示符;在Mac或Linux系统中,可以直接打开终端。检查当前pip版本。在终端或命令行中输入以下命令&#…...

Collection与数据结构 Stack与Queue(一): 栈与Stack
1. 栈 1.1 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&…...

内部类(来自类和对象的补充)
❤️❤️前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&a…...

Android 高德地图
1.获取Key 进入高德开放平台控制台,创建一个新应用。在创建的应用上点击"添加key"按钮,在弹出的对话框中,依次输入key名称,选择服务平台为“Android平台”,输入发布版安全码 SHA1、以及 Package。 获取 S…...