玩转Docker安装和使用MySQL数据库(详解)
一.安装Docker
0.什么是Docker?
请参见菜鸟教程关于Docker的讲解,关于Docker的相关知识菜鸟教程讲解的很全面。
1.下载Docker安装包
Docker有很多版本,因为我的操作系统是Win10,所以这里我选择的是Docker Desktop for Windows 3.0.4。Win7、Win8理论上是不支持该版本Docker的,Win7、Win8可以使用Docker toolbox。
鉴于Docker国外官网的下载速度,这里我提供一个百度网盘的下载链接。
点击下载(提取码:6666)
2.开启Hyper-V
Hyper-V是微软的虚拟化技术,可以在Windows操作系统上实现全虚拟化和半虚拟化,Docker需要依赖Hyper-V的半虚拟化技术实现自身的功能。
(1)开启步骤
控制面板——》程序——》启用或关闭Windows功能——》Hyper-V
(2)关于虚拟机与Hyper-V冲突问题
如果你之前同时使用过虚拟机和容器产品,那么一定会遇到这个问题。以前,大部分虚拟机无论是VMware还是Oracle虚拟机都必须关闭Hyper-V才能使用,但是在Windows上使用Docker就必须要使用Hyper-V,这就造成了冲突。现在这个冲突已经被VMware所解决了,全新版的VMware Workstation 16 Pro已经全面支持Hyper-V技术,使你可以在使用Docker的同时,使用虚拟机。
点击下载VM16(提取码:6666)
3.运行Docker安装包
(1)三个全选,然后OK
- 使Hyper-V功能可用
- 为WSL 2安装所需的Windows组件
- 添加快捷方式到桌面
(2)完成安装
(3)特殊情况说明
某些版本较低的Win10可能还需要WSL的组件,Docker会提示你去微软官网下载,这里为了方便,我放了一个下载链接。
点击下载(提取码:6666)
二、使用Docker
1.注册Docker账户
使用Docker账户可以上传本地镜像到Docker Hub,以供自己和他人下载。
点击跳转到Docker官网
2.Docker菜单详解
平时使用仪表盘和终端命令就够了,下图是Docker图标右键菜单。
(1)仪表盘
(2)镜像仓库
(3)设置:常规
PS:建议关闭最后一项,给Docker发送错误报告会造成卡顿。
(4)设置:资源:代理
(5)设置:资源:网络
PS:建议启用手动DNS,因为Docker的DNS服务时常不靠谱。如果Docker平常使用国外网络服务比较多,可以使用8.8.8.8
谷歌的DNS服务。如果国内服务比较多,可以使用114.114.114.114
(6)设置:资源:WSL集成
(7)设置:Docker引擎
PS:你可以为Docker设置国内源,用来加速,详情请参考菜鸟教程
推荐使用阿里云的源,网易的源不太好用。
(8)设置:实验特性
(9)设置:K8S
PS:K8S指的就是kubernetes,因为字母k和字母s之间有8个英文字母,所以就简写为K8S,这是一种流行的通俗的简写。更多关于K8S的学习信息可以从K8S中文社区获取。
(10)故障维护
(11)用户子菜单
3.Docker命令详解
请参考菜鸟教程Docker使用部分
三、安装并使用MySQL
Docker安装MySQL有两种方式,一种是纯命令的安装方式,另一种是是通过图形化界面指指点点的方式,因为纯命令的方式比较酷,所以我这里只介绍这种,有兴趣的可以自行尝试图形化的方式。
1.拉取MySQL镜像
在Powershell或者cmd里输入docker pull mysql
2.利用MySQL镜像创建一个运行MySQL的容器
执行命令docker run -p 3306:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
命令参数详解:
docker run
docker创建容器(请区别docker start
命令,该命令为启动已有的容器)
-p
设置主机端口和容器端口映射(默认TCP协议),格式为:主机端口:容器端口
--name
设置容器的名字,此处为mymysql
-e
传递环境变量,这里将数据库的密码设置为123456,请各位根据自身条件调整。
-d
指定容器创建所用的镜像,并在后台运行。
PS:推荐使用powershell执行命令,因为命令中含有相对路径,老旧的cmd无法执行该命令。从下图仪表盘可以看出,名为mymysql的容器已经创建成功。
3.查看MySQL容器运行状态
执行命令docker ps -a
参数详解:
docker ps
列出正在运行的容器
docker ps -a
列出所有容器
PS:记住容器的ID,待会要用,这里我的ID为“1bb4563d4be7”,ID是随机生成的,每个人需要记住自己的。
4.进入MySQL容器
执行命令docker exec -it 1bb4563d4be7 /bin/bash
参数详解:
docker exec
进入Docker容器的一种方式
-it
即使没有连接已然开启STDIN,分配一个伪TTY。
1bb4563d4be7
容器ID
/bin/bash
以Bash Shell命令的方式,进行交互
PS:Docker默认为Linux容器,如果需要切换到Windows容器,请点击右下角图标菜单中的Switch to Windows containers
5.MySQL使用——命令行
执行命令mysql -u root -p
连接MySQL,然后就可以愉快的使用MySQL命令行了。这里可以看到MySQL的版本为8.0.23社区版。
执行命令GRANT ALL ON *.* TO 'root'@'%';
,开启远程连接权限
执行命令flush privileges;
刷新权限
6.MySQL使用——Navicat
Navicat是一款非常棒的可视化数据库管理工具,使用这款软件我们能很轻松的处理数据库中的数据。
链接名为Docker MySQL(这个随意)
主机名为localhost(这个不能变)
端口为3306(这个不能变)
用户名为root(你可以在MySQL中新建其他用户)
密码为123456(根据个人的情况来)
然后测试一下连接,跑通了,大功告成,可以随意建几个数据库玩一玩SQL。
7.MySQL使用——JDBC驱动(Java)
利用JDBC我们可以实现Java程序与数据库之间的交互。JDBC驱动的配置有很多种方式,最主要的两种方式是自行配置的jar包和利用Maven配置。这里推荐编程时使用创建Maven项目的方式管理依赖包,这会大大提升编程的效率,提升项目的可移植性。
(1)自行配置jdbc驱动的jar包
1)下载JDBC驱动
官网下载
百度网盘下载(提取码:6666)
2)将JDBC驱动加入主机jdk文件中
路径:%JAVA_HOME/jre/lib/ext
如下图:
3)编写程序测试是否连通
首先我利用Navicat创建了一个表,如下图
然后编写java程序
import java.sql.*;
public class test {
public static void main(String[] args) throws Exception {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver"); // 此处为MySQL8.0版本及以上的写法
// com.mysql.jdbc.Driver (这是MySQL8.0以下版本的写法)
//URL、User、Password
String URL = "jdbc:mysql://localhost:3306/stu?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai";
// jdbc:mysql://主机名或IP地址:MySQL所使用的端口号/数据库名称?是否使用Unicode编码&具体使用那一种编码&授时地点(这是MySQL8.0及以上的写法)
//jdbc:mysql://localhost:3306/stu (这是MySQL8.0以下版本的写法)
String User = "root"; // 这里为你的用户名
String Password = "123456"; // 这里为数据库密码
//创建连接
Connection conn = DriverManager.getConnection(URL, User, Password); // 创建conn连接对象
Statement stmt = conn.createStatement(); // 实例化Statement对象
String SQL = "select * from student;"; // SQL语句,此处报警是因为我没有在IDEA里设置SQL方言
ResultSet rs = stmt.executeQuery(SQL); // 执行SQL语句并返回结果集
System.out.println("id name"); // 打印student表的属性名
while(rs.next()){ // 按行遍历结果集
int id = rs.getInt("id"); // 从结果集中获取id属性的值
String name = rs.getString("name"); // 从结果集中获取name属性的值
System.out.println(id + " " + name); // 打印id和name
}
}
}
java程序运行结果如下:
(2)利用Maven管理JDBC依赖(强烈推荐!!!)
1)首先我们要建立一个Maven项目,这里以IDEA为例。
By the way,IDEA比Eclipse好用太多了,IDEA对于高校老师和学生是免费的,利用edu邮箱去创建一个IDEA账号,就可以自动领取jetbrains专业版全家桶,到期后也可重新申领。
点击新建项目——》maven——》next——》改一下项目名——》创建成功
2)编写pom.xml文件
添加下列代码
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
</dependencies>
3)加载Maven变更
刚添加完依赖不要急着去运行程序,这时候依赖还是红的,我们需要先加载Maven变更,也就是点下图这个地方。
加载完成后:
如果加载比较慢,可以更换IDEA的源,这里不再拓展。
4)使用刚才的Java程序进行测试
连接成功
8.MySQL使用——mysql-connector驱动(Python)
mysql-connector是MySQL官方的Python驱动。
在进行这一步之前我们需要更改MYSQL的加密规则,在MySQL5.8(也就是MySQL8.0)及以后的各版本,加密规则由mysql_native_password变更为了caching_sha2_password,这使得mysql-connector驱动无法使用。为了解决这个问题,我们需要手动改回mysql_native_password。
1)进入MySQL容器
执行命令docker exec -it 容器id /bin/bash
2)进入MySQL数据库命令行
执行命令mysql -u root -p
3)更改加密规则
执行命令ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
执行命令ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
执行命令flush privileges;
刷新权限
4)退出到主机命令行
执行命令quit
退出MySQL
执行命令exit
退出MySQL容器
这样加密规则就修改完了。
5)安装mysql-connector驱动
在主机终端上执行命令python -m pip install mysql-connector -i http://mirrors.aliyun.com/pypi/simple/
6)现在,让我们写一段Python代码试着连接一下数据库。
import mysql.connector # 导入mysql-connector驱动
if __name__ == '__main__': # 主方法入口
mydb = mysql.connector.connect(
host="localhost", # 主机名或IP地址
port="3306", # MySQL端口
user="root", # 用户名
passwd="123456", # 密码
db='stu', # 需要连接的数据库
charset='utf8', # 字符编码
auth_plugin='mysql_native_password' # 加密规则
)
mycursor = mydb.cursor() # 连接数据库
SQL = "select * from student" # SQL语句
mycursor.execute(SQL) # 执行SQL语句
myresult = mycursor.fetchall() # fetchall()获取所有记录到结果集
for x in myresult: # 遍历结果集
print(x)
运行成功!!!
如果这篇文章对你有帮助请一键三连呦!!!!!