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

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里目前设置oot和test_site_user两个用户的密码相同,都为123456,在mysql客户端连接数据库时,就可以用这个密码。


test_site_db数据库已创建
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 容器里:


进入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返回的结果

testdb.php的功能是查出mysql.user数据表里用户的个数信息,返回结果为1行,用户数为3,和下图MySQL-Front客户端查询的结果对上了。
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环境实战(八):安装php-fpm
下一篇:Docker搭建LNMP环境实战(十):脚本化一次性安装测试、生产环境
所属文集:Docker搭建LNMP环境实战


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容