Docker搭建LNMP环境实战(09):安装mariadb

news2024/11/27 1:20:37

1、编写mariadb部署配置文件

在文件夹:/mnt/hgfs/dockers/test_site/compose下创建文件:test_site_mariadb.yml,内容如下:

version: "3.5"
services:
    test_site_mariadb:
        container_name: test_site_mariadb
        image: mariadb:10.3
        restart: always
        privileged: true
        networks:
            - test_site_network
        ports:
            - 3306:3306
        environment:
            TIME_ZONE: Asia/Shanghai
            MYSQL_ROOT_PASSWORD: 123456
            MYSQL_DATABASE: test_site_db
            MYSQL_USER: test_site_user
            MYSQL_PASSWORD: 123456
        volumes:
            - /var/test_site/data/mariadb:/var/lib/mysql
#            - /mnt/hgfs/dockers/test_site/data/mariadb:/var/lib/mysql
        command: [
            '--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客户端连接数据库时,就可以用这个密码。
图1  test_site_db数据库已创建

图1 test_site_db数据库已创建
![图2 test_site_user已创建](https://img-blog.csdnimg.cn/direct/6bb884f8584f4cf39be21f4aa93e5c49.jpeg#pic_center)
图2 test_site_user已创建

从上面两张图可以看到,在利用脚本进行安装后,数据库和用户都已建立。并且能查看到 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 容器里:
图3  进入test_site_php内部

图3 进入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;
返回结果如下:
图4  testdb.php返回的结果

图4 testdb.php返回的结果

testdb.php的功能是查出mysql.user数据表里用户的个数信息,返回结果为1行,用户数为3,和下图MySQL-Front客户端查询的结果对上了。
图5  mysql.user数据表里的用户信息
图5 mysql.user数据表里的用户信息

至此,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/bash

cd /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):大结局!脚本化一次性安装测试、生产环境


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1563034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 自定义View 测量控件宽高、自定义viewgroup测量

1、View生命周期以及View层级 1.1、View生命周期 View的主要生命周期如下所示&#xff0c; 包括创建、测量&#xff08;onMeasure&#xff09;、布局&#xff08;onLayout&#xff09;、绘制&#xff08;onDraw&#xff09;以及销毁等流程。 自定义View主要涉及到onMeasure、…

Mybatis-自定义映射ResultMap用法

文章目录 一、处理属性名与字段名不同问题1.通过设置查询别名&#xff0c;使类属性名与字段名&#xff08;数据库内的名&#xff09;一致2.设置全局配置&#xff0c;使下划线自动映射为驼峰3.ResultMap 二、处理多对一映射问题前提背景1.使用级联来实现2.association 标签实现3…

Redis数据库常用命令和数据类型

文章目录 一、Redis数据库常用命令1、set/get2、keys3、exists4、del5、type6、rename6.1 重命名6.2 覆盖 7、renamenx8、dbsize9、密码设置10、密码验证11、查看密码12、取消密码13、Redis多数据库常用命令13.1 多数据库间切换13.2 多数据库间移动数据13.3 清除数据库数据 二、…

TSINGSEE青犀智慧工厂视频汇聚与安全风险智能识别和预警方案

在智慧工厂的建设中&#xff0c;智能视频监控方案扮演着至关重要的角色。它不仅能够实现全方位、无死角的监控&#xff0c;还能够通过人工智能技术&#xff0c;实现智能识别、预警和分析&#xff0c;为工厂的安全生产和高效运营提供有力保障。 TSINGSEE青犀智慧工厂智能视频监…

【Leetcode】331. 验证二叉树的前序序列化

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接&#x1f517; 序列化二叉树的一种方法是使用 前序遍历 。当我们遇到一个非空节点时&#xff0c;我们可以记录下这个节点的值。如果它是一个空节点&#xff0c;我们可以使用一个标记值记录&#x…

前端 - 基础 表单标签 - 表单元素 input - (name Value checked maxlength )属性详解

目录 name 属性 Value 属性 Checked 属性 Maxlength 属性 场景问答 # <input> 标签 除了 type 属性外&#xff0c;还有其他常用属性 >>> name 属性 在上一节 我们遇到的 单选按钮 &#xff0c;为什么 本应该 多选一 结果成了 多选多的问题 就…

HashMap考点相关源码解析

参考资料&#xff1a; HashMap超详细源码解析 - 掘金 HashMap常见面试题_hashmap面试题-CSDN博客 详解&#xff1a;HashMap红黑树的阈值为什么是8&#xff1f;_hashmap 红黑树阈值为什么是8-CSDN博客 史上最全HashMap源码整理-CSDN博客 HashMap源码和实现原理_hashmap源码…

10个最佳3D角色下载站

每个人都喜欢免费的东西。 无论是免费的 3D 角色还是游戏资产&#xff0c;我们都喜欢它们。 以下是可以为你的游戏获取免费 3D 角色的前 10 个网站的列表。 你可以将它们用于多种用途&#xff0c;例如 3D 打印或动画剪辑。 如果需要将下载的3D角色转化为其他格式&#xff0c;可…

基于springboot的房屋租赁系统平台

功能描述 流程&#xff1a;房主登陆系统录入房屋信息》发布租赁信息&#xff08;选择房屋&#xff09;》租客登陆系统浏览租赁信息》和房主联系、看房&#xff08;根据租赁信息单的电话线下沟通&#xff09;》房主发起签约&#xff08;生成邀请码&#xff09;》租客登陆系统根…

大模型实时打《街霸》捉对PK,GPT-4居然不敌3.5,新型Benchmark火了

源自&#xff1a;量子位 作者&#xff1a;陈哲涵 黎学臻 考验AI的动态决策力 第一个挑战是定位人物在场景中的位置&#xff0c;通过检测像素颜色来判断。 正如开发者所说&#xff0c;想要赢&#xff0c;要在速度和精度之间做好权衡。 “人工智能技术与咨询” 发布

朵米3.5客服系统源码,附带系统搭建教程

朵米客服系统是一款全功能的客户服务解决方案&#xff0c;提供多渠道支持&#xff08;如在线聊天、邮件、电话等&#xff09;&#xff0c;帮助企业建立与客户的实时互动。该系统具有智能分流功能&#xff0c;可以快速将客户请求分配给适当的客服人员&#xff0c;提高工作效率。…

RabbitMQ高级笔记

视频链接&#xff1a;【黑马程序员RabbitMQ入门到实战教程】 文章目录 1.发送者的可靠性1.1.生产者重试机制1.2.生产者确认机制1.3.实现生产者确认1.3.1.开启生产者确认1.3.2.定义ReturnCallback1.3.3.定义ConfirmCallback 2.MQ的可靠性2.1.数据持久化2.1.1.交换机持久化2.1.2.…

Python疑难杂症(14)---Numpy知识集合(二)学习Python的NUMpy模块的定向取值、聚合分析函数、矩阵运算等

4、索引取值 像对 python 列表那样进行切片&#xff0c;对 NumPy 数组进行任意的索引和切片&#xff0c;取得数组或者单个的元素值。 arr1np.array([1,2,3,4,5,6,7]) print(arr1) print(arr1[5]) print(arr1[2:4]) 输出&#xff1a;[1 2 3 4 5 6 7] 6 [3 4] B np.arra…

如何分析现货白银的行情?2个工具的介绍

现在给投资者拿出一段现货白银行情&#xff0c;投资者会如何分析&#xff1f;怎么找到其中的机会呢&#xff1f;相信有不少人对此还是不甚了解。有的投资者平常看书学得头头是道&#xff0c;但是一碰到实际行情就懵了&#xff0c;这都是没有好好掌握如何分析现货白银行情的方法…

VScode debug python(服务器)

方法一&#xff1a; 创建launch.json文件&#xff1a; launch.json文件地址&#xff1a; launch.json文件内容&#xff1a; {"version": "0.2.0", //指定了配置文件的版本"configurations": [{"name": "Python: Current File&…

WordPress外贸建站Astra免费版教程指南(2024)

在WordPress的外贸建站主题中&#xff0c;有许多备受欢迎的主题&#xff0c;如Avada、Astra、Hello、Kadence等最佳WordPress外贸主题&#xff0c;它们都能满足建站需求并在市场上广受认可。然而&#xff0c;今天我要介绍的是一个不断颠覆建站人员思维的黑马——Astra主题。 原…

【Javascript 漫游】【050】数据类型 Symbol

文章简介 本篇文章为【JavaScript 漫游】专栏的第 050 篇文章&#xff0c;对 ES6 规范新增的 Symbol 数据类型的知识点进行了记录。 概述 ES5 的对象属性名都是字符串&#xff0c;这容易造成属性名的冲突。比如&#xff0c;我们使用了一个他人提供的对象&#xff0c;但又想为…

ts 中数据约束类型

在 swagger 等接口文档中&#xff0c;查看 json代码&#xff0c;复制 将其导入到 json.cn&#xff0c;便于查看 在api文件夹下&#xff0c;新建一个定义ts类型的文件 type.ts。 定义数据类型 ---> export interface Bbb {} 调用数据类型----> export type Xxx Bbb[]…

多导购分摊业绩比例

业务场景&#xff1a; 开单是多个销售参与开单的&#xff0c;但是每个人贡献不一致&#xff0c;所以分摊的业绩比例不一致&#xff0c;总业绩比为100%。 //点击按钮&#xff0c;弹窗 <image bindtap"handleAddsales" src"/images/add.png" style"…

mongodb sharding分片模式的集群数据库,日志治理缺失导致写入数据库报错MongoWriteConcernException的问题总结(下)

一、接着上文 上文介绍了mongodb sharding的分片集群搭建&#xff0c;本文侧重于讲述日志治理。 这里使用linux自带的日志治理工具logrotate&#xff0c;无论是哪个端口的进程&#xff0c;其日志治理方式类似。 查看/data目录下的文件大小&#xff0c; du -hs *二、Logrota…