介绍
介绍
前面福哥已经带着大家学会了搭建PHP的运行环境了,今天我们来搭建一个数据库服务。福哥推荐使用MySQL数据库,它有着简单、轻便、速度快、维护容易的特点。MySQL提供了免费的社区版本,大家可以免费使用MySQL数据库开发自己的web应用。
今天福哥就带着大家使用mysql:5.7-debian基础镜像来搭建MySQL数据库环境。
环境
镜像版本 | mysql:5.7-debian |
操作系统 | CentOS 7 x86_64 2009 |
服务器 | TFCentOS7x64 |
IP | 192.168.168.68 |
端口 | 3306 |
安装
Dockerfile
基础镜像
福哥选择的是mysql:5.7-debian这个基础镜像,这个镜像是基于debian系统的。
https://hub.docker.com/_/mysql/tags?page=1&name=5.7-debian
现在hub.docker.com依然打不开,大家就选这个版本吧!
拉取镜像mysql:5.7-debian,添加到registry.tongfu.net:5000私有仓库里面。
docker pull mysql:5.7-debian docker tag mysql:5.7-debian registry.tongfu.net:5000/mysql:5.7-debian docker rmi mysql:5.7-debian docker images | grep mysql
创建镜像目录
创建镜像目录tfmysql5并切换到tfmysql5目录下面。
mkdir /tongfu.net/data/dockerfile/tfmysql5 cd /tongfu.net/data/dockerfile/tfmysql5
依赖镜像
第一行写上依赖镜像mysql:5.7-debian。
FROM registry.tongfu.net:5000/mysql:5.7-debian
维护者信息
这个是福哥写的维护者信息。
# for MAINTAINER MAINTAINER Author: Andy Bogate MAINTAINER Email: tongfu@tongfu.net MAINTAINER Home page: https://tongfu.net MAINTAINER Datetime: 2023/04/02 MAINTAINER Version: v1.0
配置文件
mysqld.cnf
mysqld.cnf的存放目录是/etc/mysql/mysql.conf.d/,默认的mysqld.cnf里面只有一些基本的配置项。如果我们想要设置更多的MySQL服务器参数,可以将这个文件拷贝出来进行编辑,最后再通过Dockerfile打包到镜像里面。
启动临时容器,从容器里复制mysqld.cnf出来放到镜像目录下。
docker run -tid --name ttt -h ttt -e MYSQL_ROOT_PASSWORD=abcdef registry.tongfu.net:5000/mysql:5.7-debian docker cp ttt:/etc/mysql/mysql.conf.d/mysqld.cnf mysqld.cnf docker rm -f ttt
福哥设置了server-id和binlog日志相关参数,可以用来作为主节点使用;福哥还设置了环境变量,因为默认的参数性能释放比较保守;福哥针对innodb的默认参数进行了优化,提高性能。
福哥还设置了sql_mode参数,默认的sql_mode比较严格,一般的SQL会执行不了。
server-id = 202307181 log-bin = tfmysql-bin max_binlog_size = 256M expire_logs_days = 6 max_allowed_packet = 128M max_connections = 100 max_connect_errors = 1000 key_buffer_size = 8M table_open_cache = 256 open_files_limit = 65535 query_cache_size = 0 tmp_table_size = 8M thread_cache_size = 8 read_buffer_size = 128K sort_buffer_size = 256K join_buffer_size = 128K myisam_max_sort_file_size = 1G myisam_sort_buffer_size = 8M innodb_flush_log_at_trx_commit = 2 # 0 - no writen, 1 - writen everytimes, 2 - writen per second innodb_log_buffer_size = 2M innodb_buffer_pool_size = 32M innodb_log_file_size = 16M innodb_thread_concurrency = 4 sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
在创建新的镜像的时候把mysqld.cnf配置文件拷贝进去。
# mysqld.cnf COPY mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf
创建镜像
使用下面的命令创建tfmysql:5.7-1.0.0镜像。
docker build -f Dockerfile \ -t registry.tongfu.net:5000/tfmysql:5.7-1.0.0 ./
查看镜像
看看tfmysql:5.7-1.0.0镜像。
docker images | grep tfmysql
启动MySQL
MySQL数据目录
在宿主机建立一个用来存放MySQL数据的目录,它将被映射到容器的MySQL数据目录上面。
mkdir -p /tongfu.net/data/docker/data/tfmysql chown 999.999 /tongfu.net/data/docker/data/tfmysql
启动容器
使用下面的命令基于tfmysql:5.7-1.0.0镜像启动一个容器,将3306端口映射到宿主机上面,将/var/lib/mysql这个mysql数据目录映射到前面建立的目录上面。
docker run -tid \ --name tfmysql \ -h tfmysql \ -p 3306:3306 \ -v /tongfu.net/data/docker/data/tfmysql:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=abcdef \ registry.tongfu.net:5000/tfmysql:5.7-1.0.0
安装Workbench
下载
Workbench是一款官方的免费的用于管理MySQL数据库的软件,既然是官方的,还是免费的,用它挺好!
https://dev.mysql.com/downloads/workbench/
安装
启动安装包,一路“Next”就可以了!
安装完成了,这个就是Workbench的主界面了!
MySQL基本操作
登录MySQL
使用下面的命令登录MySQL服务器。
docker exec -ti tfmysql mysql -uroot -pabcdef
创建数据库
创建一个数据库tfmysql,数据编码utf8mb4。
create database tfmysql default charset utf8mb4;
切换数据库
切换到新创建的数据库tfmysql里面。
use tfmysql
创建数据表
在tfmysql数据库里面创建一个数据表user,设置字段userId、userName,userPwd、createDT、updateDT、lastLoginDT。
CREATE TABLE user ( userId INT NOT NULL AUTO_INCREMENT, userName VARCHAR(45) NOT NULL, userPwd CHAR(32) NOT NULL, createDT DATETIME, updateDT DATETIME, lastLoginDT DATETIME, PRIMARY KEY (userId), KEY u_userName (userName) );
Workbench操作MySQL
创建连接
按照福哥写的参数添加一个连接,点击“Test Connection”测试连接是否正常。
这时输入tfmysql的密码,勾选“Save password in vault”把密码保存起来。
连接测试成功了!
点击“OK”完成连接的创建!
进入tfmysql5这个连接,把界面布局改成这样!
插入数据
在默认的窗口里面编写两条INSERT语句,向user数据表里插入两条数据。
INSERT INTO user (userName, userPwd, createDT) VALUES ('福哥', md5('abcdef'), now()); INSERT INTO user (userName, userPwd, createDT) VALUES ('鬼谷子叔叔', md5('abcdef'), now());
查询数据
编写SELECT语句查询刚刚插入的两条数据。
SELECT * FROM user;
PHP操作MySQL
查询tfmysql容器IP地址
使用inspect命令查询tfmysql容器的IP地址,tfmysql的IP地址是172.17.0.3。
docker inspect tfmysql | grep IPAddress
tfmysql.php
在/tongfu.net/data/docker/data/tfphp/html/目录下面建立tfmysql.php程序文件,编写连接MySQL数据库的程序,这里面会用到刚刚查到的tfmysql容器的IP地址172.17.0.3。
<?php header("Content-Type: text/html; charset=utf-8"); try{ // 连接数据库 $pdo = new \PDO("mysql:host=172.17.0.3;dbname=tfmysql", "root", "abcdef", [\PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8mb4"]); $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // 获取数据库列表 $rs = $pdo->prepare("show databases"); $rs->execute(); $dbs = $rs->fetchAll(\PDO::FETCH_ASSOC); // 获取数据表列表 $rs = $pdo->prepare("show tables"); $rs->execute(); $tables = $rs->fetchAll(\PDO::FETCH_ASSOC); // 获取数据表数据 $rs = $pdo->prepare("select * from user"); $rs->execute(); $data = $rs->fetchAll(\PDO::FETCH_ASSOC); // 数据库 echo "<table border=\"1\"><tbody>"; echo "<tr><th>Database</th></tr>"; foreach ($dbs as $db){ echo "<tr><td>". $db['Database']. "</td>"; } echo "</tbody></table>"; // 数据表 echo "<table border=\"1\"><tbody>"; echo "<tr><th>Table</th></tr>"; foreach ($tables as $table){ echo "<tr><td>". $table['Tables_in_tfmysql']. "</td>"; } echo "</tbody></table>"; // 数据 echo "<table border=\"1\"><tbody>"; echo "<tr>"; foreach ($data[0] as $field => $value){ echo "<th>". $field. "</th>"; } echo "</tr>"; foreach ($data as $row){ echo "<tr>"; foreach ($row as $field => $value){ echo "<td>". $value. "</td>"; } echo "</tr>"; } echo "</tbody></table>"; } catch (\PDOException $e){ echo $e->getMessage(); }
启动tfphp容器
因为福哥把TFCentOS7x64虚拟机重新启动了,所以之前启动的所有容器都停止了。现在我们要用到tfphp容器,通过下面的命令把它启动起来。
docker start tfphp
浏览器访问
打开浏览器访问http://192.168.168.68/tfmysql.php,可以看到MySQL的数据库信息。
总结
今天福哥在TFCentOS7x64服务器上面通过Dockerfile创建了一个镜像tfmysql:5.7-1.0.0,并且通过这个新创建的镜像tfmysql:5.7-1.0.0启动了一个容器,这个镜像用来运行MySQL数据库服务。
后面福哥会教给大家使用各种编程语言去操作MySQL数据库的方法,敬请期待~