使用Docker快速搭建Mysql,并进行数据卷分离


1、搜索镜像

docker search mysql

 

2、下载mysql的官方镜像

docker pull mysql

 

3、查看自己的镜像

[root@localhost mysql]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              e6bc04e5d2ab        4 weeks ago         442MB
mysql               latest              5195076672a7        7 weeks ago         371MB
hello-world         latest              f2a91732366c        5 months ago        1.85kB

 

4、启动MySQL容器

docker run -d --name myMysql -v /data/mysql:/var/lib/mysql -v /data/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:5.6

d : --detach,后台运行。
--name : 为你的镜像创建一个别名,该别名用于更好操作。
-p : 映射端口,一般我们会将默认端口进行更改,避免与本机的mysql端口冲突,如果你宿主机有mysql,请更改端口,如 -p 33060:3306。
-e : 环境变量。为mysql的root用户设置密码为123456。
-v : 指定数据卷,意思就是将mysql容器中的/var/lib/mysql(这个是数据库所有数据信息文件)映射到宿主机/data/mysql里面。

 

5、进入到myMysql容器中

docker exec -ti myMysql /bin/bash

-i : --interactive,交互界面。
-t : --tty,伪终端界面。 

 

6、登录到mysql服务器中

mysql -uroot -p -h127.0.0.1

 

7、查看myMysql容器的IP

[root@localhost mysql]# docker inspect myMysql | grep "IPAddress"
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.2",
                    "IPAddress": "172.17.0.2",

 

8、-v参数

这时,其实数据卷已经进行了分离,还记得启动容器时我们携带的“-v”参数么。
# 在宿主机执行

ls /data/mysql

删除容器,看数据卷是否还在

docker rm myMysql

依然还在,这说明如果我们创建新的mysql容器,那么只需要指定数据卷就可以了。

 

9、细节处还需深入研究

docker -v /data/mysql:/var/lib/mysql

以上这条命令到底是咋运行的。
第一次,启动mysql容器时,宿主机的/data/mysql是空的。是docker容器中的/var/lib/mysql会自动映射到宿主机/data/mysql,让宿主机有了对应的文件信息。
第二次,我删除了docker容器,这时宿主机的/data/mysql是有文件的。然后我创建了mysql容器,并设置对应的映射关系。这时,宿主机的/data/mysql文件映射到了容器中,保持数据一致。
这就产生疑问了?到底是以哪一个为主要的数据呢?

总结 基本上可以了解为这样一个流程,当指定-v参数时,在启动容器时会首先检查宿主机中是否有数据文件:

如果有的话,则判断是否是数据库文件,如果符合数据库文件系统的文件目录。那么则会使用;如果不符合数据库文件系统的文件目录,那么则会无法启动,直接报错。 如果没有的话则会初始化数据库文件,生成一个干净的数据库系统并进行宿主机和docker容器间的互通。

 

10、docker相关命令

docker ps  默认显示运行的容器
docker ps -a 显示所有容器
docker stop myMysql  停止容器
docker rm -fv myMysql 删除容器,连卷也一起删除
docker logs myMysql 查容器启动失败日志
docker inspect mysql 查镜像详情
docker pull mysql:5.6

 

11、注意事项

不这样操作 容器运行不起来

在使用-v选项映射目录时,宿主机需关闭SElinux:

# setenforce 0

或者给数据目录添加相关selinux权限:

chcon -Rt svirt_sandbox_file_t /data/mysql

最后自己发现还都不行,需要把自己手动创建的目录/data/mysql删除了,再成功启动容器 

补充,还有可能是用了最新版本的MySQL8.0 

 

 

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM