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: 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客户端连接数据库时,就可以用这个密码。
图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/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):大结局!脚本化一次性安装测试、生产环境


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

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

相关文章

逐步学习Go-Select多路复用

概述 这里又有多路复用&#xff0c;但是Go中的这个多路复用不同于网络中的多路复用。在Go里&#xff0c;select用于同时等待多个通信操作&#xff08;即多个channel的发送或接收操作&#xff09;。Go中的channel可以参考我的文章&#xff1a;逐步学习Go-并发通道chan(channel)…

Gparted工具 初始化磁盘

Gparted工具 初始化磁盘 1、安装 没有此工具请先安装&#xff1a; yum install epel-release yum install gparted yum install yum-utils git gnome-common gcc-c yum-builddep gparted 2、打开Gparted工具&#xff0c;初始化磁盘 使用具有root权限的普通用户打开gparted&…

HWOD:整型数组排序

一、知识点 while(1){}表示永久循环 使用break结束循环 二、题目 1、描述 输入整型数组和排序标识&#xff0c;对其元素按照升序或降序进行排序 2、数据范围 1<n<1000 0<val<100000 3、输入 第一行输入数组元素个数 第二行输入待排序的数组&#x…

电商技术揭秘二:电商平台推荐系统的实现与优化

文章目录 一、推荐系统的重要性1.1 提升用户体验1.1.1 个性化推荐增强用户满意度1.1.2 减少用户选择困难 1.2 增加销售额1.2.1 促进交叉销售和捆绑销售1.2.2 提高用户购买转化率 1.3 数据分析与用户行为理解1.3.1 挖掘用户偏好和购买习惯1.3.2 为产品开发和库存管理提供数据支持…

npm ERR! code CERT_HAS_EXPIRED 淘宝镜像失效

近期vue安装失败&#xff0c;具体如下&#xff1a; 1.先npm cache clean --force 再下载 插件后缀加上 --legacy-peer-deps 2.certificate has expired npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.o…

Windows安装禅道系统结合Cpolar实现公网访问内网BUG管理服务

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

943: 顺序表插入操作的实现

学习版 【C语言】 需要扩充数组 【C】 #include <iostream> #include <vector> #include <algorithm> using namespace std; class MyLinkedList { public:struct LinkedNode{int val;LinkedNode* next;LinkedNode(int x) :val(x), next(NULL) {}};MyLin…

TypeScript语法快速上手

TypeScript语法 对比ts编译器类型注解新增类型数组自定义类型注解函数类型对象类型元组类型类型推断枚举类型 对比 最大区别&#xff1a;ts能在编译时就能发现类型错误的问题&#xff0c;而js只有在系统运行时再通过异常中断来发现 ts的底层仍是js&#xff0c;但ts能够有效减少…

代码随想录算法训练营第二十七天|131.分割回文串、93.复原IP地址

文档链接&#xff1a;https://programmercarl.com/ LeetCode131.分割回文串 题目链接&#xff1a;https://leetcode.cn/problems/palindrome-partitioning/ 思路&#xff1a;把回溯的树画出来就好很多。startIndex用来控制切割的位置 例如对于字符串abcdef&#xff1a; 组…

golang语言系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是 golang语言系列 文章&#xff0c;主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习 1.Basic Authentication认证 每个请求都需要将 用户名密码 进行base64编码后&#xff0c;放在请求头的Aut…

html基础:颜色的 5 种表示方法(最全!)

你好&#xff0c;我是云桃桃。一个希望帮助更多朋友快速入门 WEB 前端的程序媛&#xff0c;大专生&#xff0c;2年时间从1800到月入过万&#xff0c;工作5年买房。 分享成长心得。 HTML 颜色在网页设计中扮演着重要角色&#xff0c;给网页增加颜色可以增强用户体验&#xff0c;…

AI行业买英伟达GPU,花的钱比赚的多17倍

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 发布在https://it.weoknow.com 更多资源欢迎关注 有人却表示「很合理」。 搞 AI 大模型&#xff0c;实在太烧钱了。 我们知道&…

SpringBoot mybatis-starter解析

mybatis-starter使用指南 自动检测工程中的DataSource创建并注册SqlSessionFactory实例创建并注册SqlSessionTemplate实例自动扫描mappers mybatis-starter原理解析 注解类引入原理 查看对应的autoconfigure包 MybatisLanguageDriverAutoConfiguration 主要是协助使用注解来…

图像处理环境配置opencv-python

下载python&#xff0c;配置pip使用清华源下载镜像&#xff1a; pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 切换到python目录下&#xff0c;右击cmd&#xff0c;执行pip升级指令: python -m pip install --upgrade pip 下载opencv&#x…

JavaEE SSM框架学习——MacOS Eclipse环境搭建

MacOS环境搭建 安装Homebrew Homebrew是一个包管理器&#xff0c;我们可以通过它来安装许多软件 首先打开Homebrew中文官网(brew.sh/zh-cn) 如图所示&#xff0c;复制下面那行命令到你的Macbook终端 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Ho…

针对 qt的sqlite加密数据库sqlitecipher插件QtCipherSqlitePlugin

&#x1f482; 个人主页:pp不会算法^ v ^ &#x1f91f; 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 &#x1f4ac; 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 文章目录 简介编译安装使用可视化工具查看完结 简介 在客户端存储…

太绝了!34张思维导图搞定Web安全知识架构

推荐关注 越来越多的朋友开始了解网络安全&#xff0c;但是不知道从哪里下手&#xff0c;网上的资源也很散乱&#xff0c;没有头绪&#xff0c;经常做无用功。 今天给大家分享几份网络安全思维导图&#xff0c;非常适合零基础入门或想进一步学习的小伙伴。 注&#xff1a;文…

leetcode 不同路径

62. 不同路径 问题描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…

【数据处理包Pandas】DataFrame数据选择的基本方法

目录 一、选择行/列&#xff08;一&#xff09;读取文件&#xff08;二&#xff09;选择行&#xff08;三&#xff09;选择列&#xff08;四&#xff09;选择多行多列 二、带条件筛选&#xff08;一&#xff09;startswith()方法&#xff08;二&#xff09;mean()方法&#xff…

本地运行github上下载的项目--接Git入门篇

1.了解项目 这是一个基于Spring Boot 和 Mybatis Plus 构建的Java项目&#xff0c;很经典的外卖项目&#xff0c;参考b站的黑马瑞吉外卖。 2.构建项目 SpringBoot项目&#xff0c;首先下载一些常见的项目要求的组件。然后配置如下&#xff1a; 看README&#xff0c;在阅读该…