容器数据卷以及MySQL数据卷同步
1,什么是容器数据卷:
如果数据都在容器中,那么删除容器,数据就会丢失!我们的需求:数据可以持久化
比如mysql容器,如果把容器删了,相当于删库跑路!(希望mysql数据可以存储在本地)
我们希望容器之间可以有一个数据共享的技术!docker容器中产生的数据,同步在本地!
这就是卷技术!
本质:目录的挂载,将我们容器内的目录,挂载到Linux上面
总结:使用卷技术是为了容器的持久化和同步操作,并且容器间也可以数据共享的。
,2,使用数据卷
方式一:直接使用命令挂载 -v
docker run -it -v 主机目录:容器目录
(类似于端口映射:docker run -it -p 主机端口:容器端口)
启动之后使用docker inspect 容器id查看是否挂载成功:
测试文件的同步:
再来测试:
(1),停止容器
(2),宿主机上修改文件
(3),启动容器
(4),容器内的数据依然是同步的
使用数据卷的好处:
我们以后修改只需要在本地修改即可,容器内会自动同步
3,实战:mysql同步数据
思考:mysql的数据持久化的问题
(1)获取镜像
[root@CentOs home]# docker pull mysql:5.7
5.7: Pulling from library/mysql
Digest: sha256:c8f68301981a7224cc9c063fc7a97b6ef13cfc4142b4871d1a35c95777ce96f4
Status: Image is up to date for mysql:5.7
docker.io/library/mysql:5.7
[root@CentOs home]#
(2)运行容器,需要做数据挂载
(注意:安装启动mysql时,需要配置密码的)
官方启动测试:
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
我们自己启动:
-d:后台运行
-p:端口映射
-v:卷挂载
-e:环境配置
--name:容器名字
(conf是MySQL的配置文件,data是MySQL的数据)
[root@CentOs home]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
fe98ba1e21c34c0b07e73c3096704945e56ea5d6d2a0a568f96eececa9eebb2a
[root@CentOs home]#
(3)启动成功后。我们在本机使用sqlyog来测试连接一下
(sqlyog连接到虚拟机Linux的3310端口-------3310和容器内的3306映射,这个时候就可以连接上了)
(4)在本地测试创建一个数据库,查看一下我们映射的路径是否ok
我们将容器删除后发现,挂载到本地的数据卷仍然没有丢失,这就实现了容器数据持久化!