本科前两年因为装软件搞的老电脑乌烟瘴气(主要是装了各种依赖以及混乱的文件管理),避开了装病毒软件的坑之外,太多软件只是一学期上课使用而已

,为此大动干戈在电脑上反反复复可能还会遇到依赖相关的问题(Windows在编程配置方面实在是永远的痛。。),介于暑假又接触到了docker里跑pgsql决定在这个学期的数据库课环境也用docker构建MySQL的镜像,一劳永逸。下面记录了从0到成功运行的过程。

运行环境

Windows10 - WSL2 - Ubuntu18.04

Windows10使用docker可以参考官方文档或者这份网上的简易版本

docker中使用mysql

去docker hub下载源

(这里我选了比较新的一个version 5.7.35)

1
docker pull mysql:5.7.35

创建并启动mysql容器(设置端口才可以连接)

1
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes mysql:5.7.35

参数

run:运行docker镜像

–name:给容器取名叫mysql

-e:设置容器里的环境变量(这里置空了mysql的密码环境变量

-d:容器在后台运行

最后为依赖的镜像名字

为了在docker容器删除后依然保存所需要的数据可以再增加挂载参数。首先在本地新建一个~/sqldata文件夹用来存放mysql的数据文件

1
docker run -d -p 3306:3306 -v ~/sqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7.35

参数

-v:将容器中的目录和宿主机中的目录做映射

我们只要把容器中mysql的数据目录映射到本地,将来就算这个容器被删除了,那么数据也还是在本地

查看容器

1
docker ps mysql

进入mysql容器

1
docker exec -it mysql-test mysql -h localhost -u root -p

输入刚刚的PASSWORD进入数据库,而宿主机中的~/sqldata目录也有通过mysql创建的数据库

完成之后删除mysql这个容器

1
2
docker stop mysql
docker rm mysql

接着我们重新生成容器

1
docker run -d -p 3306:3306 -v ~/sqldata:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7.35

检查原来存放于mysql中数据可以重新访问,启动docker速度还快。

补充

使用容器中的客户端去连接其他的mysql数据库(假设远程数据库ip:72.17.0.1)

1
docker exec -it mysql:5.7.35 -h 72.17.0.1 -u root -p

通过MySQL执行sql文件

把宿主机下写好的sql文件用docker cp拷贝过去。如

1
docker cp src.sql container_name:DIR

然后MySQL激活即可,mysql < src.sql

查看方式

1
mysql -h localhost -u root -p

reference

Docker中使用mysql数据库