玩转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)

运行成功!!!
在这里插入图片描述

如果这篇文章对你有帮助请一键三连呦!!!!!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达娃里氏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值