3、Docker安装mysql服务

说明

话不多说,直接看安装过程吧,初学者需要关注下官网给的安装参考。

安装过程

1、先去DockerHub官网搜索mysql,寻找自己合适的版本,下面是我下载的mysql镜像:

# 从远程仓库获取mysql8.0.23
docker pull mysql:8.0.23

2、安装mysql服务通过docker run xxx的命令方式,推荐根据官网description描述的方式进行(请阅读How to use this image、Using a custom MySQL configuration file、Where to Store Data等处的说明),来分析下我的需求:

  • 通过--name参数,设置mysql服务名称;
  • 通过-d参数,开启后台运行容器的mysql服务;
  • 通过-e参数修改镜像内部的环境变量,这里要设置root用户的密码;
  • 通过-p参数,让宿主机的3308端口映射容器的3306端口,便于外网使用容器的mysql服务;
  • 通过-v参数设置自动数据卷,暂时命名mysqldata,将容器内的mysql数据挂载到数据卷,从而持久化到宿主机的硬盘中,防止容器出现故障而丢失数据;
  • 以我修改的配置文件的配置去启动mysql服务(这个后面再重点说)。
docker run --name mysql8 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v mysqldata:/var/lib/mysql mysql:8.0.23

演示过程如下,切记一定要做数据的持久化!!

3、打开navcat客户端,就可以连接容器内的这个mysql服务了,看下:

4、接着建库建表,尝试添加一些数据记录:

5、关闭navicat客户端,此时,模拟docker容器的mysql服务宕机了或者被误删了(宕机模拟先stop再start,误删模拟先docker rm -f mysql8再重新执行之前的docker run…命令),模拟过程如下:

6、重新连接navicat客户端,看下数据库的变化,从结果可知:数据库及其数据仍不变,这里数据卷volume的持久化起到了至关重要的作用!!!

7、这里,重点说一下数据卷volume的作用(简而言之,即实现了宿主机与容器之间进行文件共享):

首先,可以通过以下命令查看容器内的细节:(是一个json文件)

docker inspect container名或containerID 

其次,了解下volume数据卷的作用,它可以实现宿主机和容器之间的目录文件共享,这样容器内的目录文件可以与宿主机同步,避免了将宿主机的目录文件通过cp复制到容器内。数据卷volume有两种挂载方式:

# 通过-v参数,实现共享,宿主机修改会同步到容器内
docker run --name 命名 -d -p 宿主机端口号:容器端口号 -v 宿主机目录或数据卷:容器目录 镜像名:标签 或镜像ID
  • 自定义数据卷目录:

# 宿主机目录是绝对路径,比如宿主机Linux的/root/test作为路径 映射 容器中tomcat服务的/usr/local/tomcat/webapps路径
docker run --name tomcat-07 -d -p 8087:8080 -v /root/test:/usr/local/tomcat/webapps tomcat:8.5.63-jdk8-corretto
  • 自动数据卷目录:

# zzz表示数据卷名称,可随意命名,不存在时docker会自动创建该数据卷并映射到宿主机的某个目录上,同时启动容器时,会将zzz对应容器目录中的全部内容复制到aa映射目录中
docker run --name tomcat-08 -d -p 8088:8080 -v zzz:/usr/local/tomcat/webapps tomcat:8.5.63-jdk8-corretto

自动挂载数据卷的优势在于,可以将原本容器的数据能持久化到宿主机的硬盘某个目录中,不管该容器是被误删还是其他原因而不存在了,仍旧可以通过zzz数据卷找回资源数据,可以通过find / -name zzz命令找到宿主机中的该数据卷。

有了上面的知识后就好理解了,一开始将名称为mysqldata的数据卷挂载到了宿主机的磁盘中,当容器内的mysql服务出现问题后,重新恢复或者重新开启一个容器安装mysql服务后,数据卷上的mysql数据资源会共享到该容器的/var/lib/mysql目录下,这就是自动数据卷的工作过程了。

8、同样地,用宿主机目录文件映射容器目录文件的方式,可以很方便的实现修改容器内的mysql配置文件,并以修改后的内容去启动mysql服务。

  • 第一步,要找到有关的配置文件,在该容器的/etc/mysql目录下,注意不同版本名称可能不一样,mysql8.0.23 中的核心配置文件为my.cnf
  • 第二步,采用-v参数,将/etc/mysql的目录通过数据卷(暂时命名mysqlconfig)挂载到宿主机的磁盘上,每次修改该数据卷所在的目录配置文件即可。
  • 我们需要再创建一个mysql3309的容器,特别注意前面存在的mysql8容器的数据卷为mysqldatamysql3309容器不能共享这个,否则会报错。最终的命令如下:(我们再开启一个新容器mysql3309
docker run --name mysql3309 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v mysqldata3309:/var/lib/mysql -v mysqlconfig3309:/etc/mysql mysql:8.0.23

演示过程如下:

启动好mysql服务后,通过navicat客户端连接试试吧~~,由于容器是进程间隔离的,开启多个端口号为3306的mysql服务容器都不会冲突,但要保证映射的宿主机的端口号不同就行,我们可以随意的创建和销毁装有mysql服务环境的容器,哈哈,是不是很爽!

总结一下

Docker安装mysql服务需要关注的两个点:

  1. 利用数据卷volume实现数据的持久化,脱离了容器管理数据,避免容器事故;
  2. 让容器内的mysql服务以自己修改的配置而去开启。

猜你喜欢

转载自blog.csdn.net/qq_29119581/article/details/112909718