基于DOCKER运行MS SQLSERVER 数据库的数据持久化


一、DOCKER 容器的数据

    docker 主要有两种数据存储形式, 一种是storage driver(也叫做 Graph driver), 另一种是 volume driver. stroage driver主要是存储那些无状态的数据, 写入密集型的场景应该使用 volume driver.

======================
storage driver
======================
    容器运行的文件系统是镜像层和容器层组成的, 一层一层叠加, 只有最上面的那层是可写的, 其他层都是只读的. Docker通过Union FS技术支持文件的读写和新建, Docker 采用插件式的方式支持多种Union FS实现, 官方文档中一般使用stroage driver术语, 目前已经有多种实现的插件, 比如: aufs/overlay/overlay2/devicemanger等等.

======================
volume driver
======================
    volume driver 经常用来实现数据持久化和文件共享功能, 具体有两种存在方式, 分别是:
1. bind mount 方式:
    是将host的目录或文件直接mount到容器中, host的目录或文件既可以容器运行之前就已存在的, 也可以是在容器运行之前不存在的.
如果在docker run 命令中采用了 -v /host/dir_or_file:/container/dir_or_file的形式, 就是bind mount方式, 即指定了host的挂载点的绝对路径.
2. volume 方式:

    是由 Docker 管理, 该volume最终存储到host的 /var/lib/docker/volumes 下. volume 方式还分为 named volume 和 Anonymous volume.

    named volume 有两种创建方法,
     (1) docker run 命令中采用了 -v one_volume_name:/container/dir_or_file , 这里的one_volume_name不是host中的绝对路径, 而是一个名称.
     (2) 通过 docker volume create 创建的, 该命令支持更多的选项, 推荐使用.
    匿名volume方式 是通过 docker run 命令中传入了 -v /container/dir 类型的参数.
3. bind mount 方式和volume方式的简单对比:
bind mount方式, docker容器直接访问host的目录或文件, 性能是最好的.
bind mount方式, docker容器直接访问host的目录或文件, 对于该host绝对目录可能会引入权限问题. 如果容器仅需要只读访问权限, 最好是显式设定只读方式.
对于 volume方式, 如果host中落地目录为空, docker先将容器中的对应目录复制到host下, 然后再进行挂载操作; 对于bind mount方式, 挂载之前没有复制操作.
容器要依赖host主机的一个绝对路径, 使得容器的移植性变差, docker 官方并不推荐这个方法, 而是推荐使用volume.

 二、MSSQL SERVER 数据库数据的持久化

1、数据库文件存放位置

    不考虑容器的移植,选用bind mount方式实现数据持久化,将主机的目录直接mount到容器中。生成容器mssql 时的参数 -v  /f/sqlserver_data:/mnt/mssql/data 就完成了主机F盘

sqlserver_data目录直接映射到容器内/mnt/mssql/data目录下

2、数据库附加数据文件

    将数据库文件拷贝到持久化目录下,在主机下运行SMSS,如图填写登录资料。密码参数 -e "SA_PASSWORD=<SQLOnLinux123>", 端口参数 -p 1533:1433

  附加数据库,指定到持久化目录

  选择数据库数据文件,系统自动识别出数据文件和日志文件,这里由于主机为WINDOWS操作系统,容器为LINUX操作系统,在文件区域斜杠要调整,否则系统找不到文件

       

 调整斜杠后,文件路径变为:/mnt/mssql/data/test.mdf,/mnt/mssql/data/test_log.ldf ,数据库文件顺利导入数据库


免责声明!

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



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