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