首页 存档 技术 查看内容

如何使Mac Docker支持SQL on Linux容器Volume特性

2018-3-30 13:00 |来自: 互联网 438 0

摘要: 点击上方“云栖社区”可以订阅哦这篇文章解决了Docker容器中SQL on Linux实例数据库与容器本身同生死同命运的问题,提出了当Docker容器销毁后,容器中的数据库文件得以保留的方法。 问题引入 这天老鸟火急火燎的 ...

点击上方“云栖社区”可以订阅哦

这篇文章解决了Docker容器中SQL on Linux实例数据库与容器本身同生死同命运的问题,提出了当Docker容器销毁后,容器中的数据库文件得以保留的方法。


问题引入


这天老鸟火急火燎的找到菜鸟:“鸟儿啊,按照你之前的文章SQL on Linux Run on Docker(https://yq.aliyun.com/articles/69312 ),当我销毁SQL on Linux Docker容器以后,我容器中的所有数据库数据丢失啦,怎么办,怎么办啊?”。


菜鸟一脸懵逼:“我是参照微软官方文档来的啊?难道这帮XX连这个问题都没有想到?”。于是,菜鸟开始了问题的重现和解决方法。


问题重现


按照上一篇文件启动的Docker容器,SQL on Linux实例中的数据库文件真的会随着Docker容器的销毁而消失,造成数据丢失的灾难吗?这一节进行问题重现和复盘。


启动Docker容器


使用Docker Run命令启动SQL on Linux服务,映射到母体机41433端口上。



创建测试对象


使用SSMS连接到Docker母体机41433端口上,执行下面的测试代码:创建测试数据库、创建测试表、初始化两条数据和查询测试表。

结果如下图展示:


销毁Docker容器


接下来模拟Docker容器销毁过程:我们需要使用Docker Stop停止SQL on Linux容器,然后使用Docker rm删除这个容器,接下来再次启动Docker容器,最后检查测试数据库、测试表和数据是否存在。如果不存在,说明Docker容器中的数据已经丢失。



检查测试对象


再次使用SSMS连接到Docker母体机41433端口,查看测试数据库,展示如下图:


从这个结果来看,测试数据库已经丢失。说明Docker容器与容器中的数据库是命运共同体、同生死共命运。如果Docker容器销毁,容器中的数据库数据也随之丢失。这个是用户数据的灾难,我们需要迫切解决这个问题。看来老鸟说的大实话啊。


解决问题


SQL on Linux对Mac Docker Volume的限制


要解决这个问题,我们需要引入Docker的Volume技术。简单的说,这个技术的核心思想就是在启动Docker容器的时候,将Docker容器中的目录映射到母体机的目录,Docker容器对这个目录的所有操作会反映到母体机的这个映射目录里面。当Docker容器销毁的时候,母体机的这个映射目录会被保留下来。这样,我们的数据库数据文件不会随着容器的销毁而消失了,继而就解决了这个问题。但是,偏偏目前SQL on Linux不支持Mac操作系统的Docker Volume特性。详情参见微软官方文档:Run the SQL Server Docker image on Linux, Mac, or Windows
关键的地方,截图如下展示:


Mac系统Docker就真的不支持SQL on Linux Docker容器的Volume吗?让我们来试试看:



的确启动Docker容器的过程中就会报告错误,详细的错误日志信息如下:



解决方案


巴嘎,这里就又引入了另外一个问题,如何解决Mac系统上SQL on Linux的Docker容器不支持Volume的问题?不要惊慌,淡定,当然是有办法的,这个解决方法便是这篇文章存在的意义。解决方法如下:



大概30秒后,Docker容器中的SQL实例服务起来以后,首先,参照问题重现中创建测试对象,然后销毁Docker容器,接下来再次启动Docker容器。



最后检查测试对象,截图如下:



其实,从启动过程的日志,我们也可以看到TestDb已经启动。


最后总结


这篇文章解决了Docker容器中SQL on Linux实例数据库与容器本身同生死同命运的问题,使得用户数据在容器被销毁时得以保留。更加详细的过程和步骤,可以参看youku视频:
11_SQLOnLinux_MacDockerVolumes (http://v.youku.com/v_show/id_XMjUwNDE5MTA3Mg==.html?spm=5176.100239.blogcont69517.22.Fo8xIu )


一周精彩文章回顾

0. 声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部