发布SQL Server Docker有哪些方式
这篇文章主要介绍“发布SQL Server Docker有哪些方式”,在日常操作中,相信很多人在发布SQL Server Docker有哪些方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”发布SQL Server Docker有哪些方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
1 构建【数据库文件内建于容器镜像之内】的 SQL Server Docker 发布步骤如下:1 Pull 一个最原始的 sql server docker 镜像镜像来自于微软在 Docker Hub 上提供的初始容器。
SQL 脚本:
CREATEDATABASECRMGOUSECRMGOCREATETABLEdbo.Account(AccountIdINTIDENTITY(1,1),AccountNameNVARCHAR(200))
保存为DBSchemaInit.sql
3 构建新容器镜像构建自定义的容器镜像,最重要的是编写 Dockerfile.
[root@centos00v1]#catDockerfileFROMmicrosoft/mssql-server-linuxMAINTAINERLenisHuang"huangyun_122@163.com"ENVACCEPT_EULA=YENVSA_PASSWORD=1QAZ2WSX3EDCEXPOSE1433
最终构建成功了:
[root@centos00v1]#dockerbuild-t=sqlserver/v1.SendingbuildcontexttoDockerdaemon3.584kBStep1/5:FROMmicrosoft/mssql-server-linux--->b2b20452a15bStep2/5:MAINTAINERLenisHuang"huangyun_122@163.com"--->Runningin532a5f141f11--->182a1a9aed84Removingintermediatecontainer532a5f141f11Step3/5:ENVACCEPT_EULAY--->Runninginc72d741f2f8e--->ee590cf78e2bRemovingintermediatecontainerc72d741f2f8eStep4/5:ENVSA_PASSWORD1QAZ2WSX3EDC--->Runningin67559621fd8d--->7d92d6155c25Removingintermediatecontainer67559621fd8dStep5/5:EXPOSE1433--->Runningin2bb8ee0440a4--->67f770bfdacdRemovingintermediatecontainer2bb8ee0440a4Successfullybuilt67f770bfdacd[root@centos00v1]#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEsqlserver/v1latest67f770bfdacd36secondsago1.44GB
至此,一份崭新的可用于项目部署的 sql server docker 构建完毕。
[root@centos00DockerNginx]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESf29258559cb4sqlserver/v1"/opt/mssql/bin/sq..."AboutaminuteagoUp59seconds0.0.0.0:32793->1433/tcpdev_sqlv1
从 docker ps 执行的结果中看到运行着 sqlv1 镜像的容器,可以通过本机的 32793 端口连接到容器中 sql server 服务对应的 1433 端口。
在 Dev, STG, UAT 环境,都以 sqlv1 为蓝本,使应用都连接到在 sqlv1 容器中运行的数据库。开发测试中出现任何问题,都可以拿着 sqlv1 重建一个新的容器来运行数据库。
4 开发新一版本的数据库应用,将其应用于 sqlv1 镜像,进而构建 sqlv2 镜像#DockerfileFROMsqlserver/v1MAINTAINERLenisHuang"huangyun_122@163.com"ENVACCEPT_EULA=YENVSA_PASSWORD=1QAZ2wsx3EDC.ENVPATH=${PATH}:/opt/mssql/bin:/opt/mssql-tools/binRUNmkdirsqlfilesCOPYDBSchemaInit.sql./sqlfiles/DBSchemaInit.sqlCOPYsetup-database.sh./sqlfiles/setup-database.shCOPYentrypoint.sh./sqlfiles/entrypoint.shRUNchmoda+x./sqlfiles/setup-database.shRUNchmoda+x./sqlfiles/entrypoint.shCMDbash./sqlfiles/entrypoint.sh#entrypoint.shecho'startingdatabasesetup'./sqlfiles/setup-database.sh&/opt/mssql/bin/sqlservr#setup-database.shecho'pleasewaitwhiledatabaseisstartingup...'sleep45secho'trytoconnecttodatabaseincontainderandcreatethesampledb...'/opt/mssql-tools/bin/sqlcmd-Slocalhost,1433-Usa-P1QAZ2wsx3EDC.-dmaster-i./sqlfiles/DBSchemaInit.sqlecho'sampledbhavebeencreated!'
作为数据库部署,每次构建新容器,要关注的便是编写增量部署脚本,以替代第一次的数据库初始化脚本 DBSchemaInit.sql.
在这种发布流程中,要思考的问题是,如何在生产环境发布。
按照 docker 发布数据库的这套流程,能发现和规避的问题是:数据库发布脚本的一致性。
在dev, stg, uat,prod 都是使用了同一套脚本,并且脚本有错误可以及时调整。不至于在单发生产环境的时候,由于在 dev,stg, uat 测试环境发布时,没有及时校验出脚本逻辑上错误,或者因为环境的影响,比如大家随意的在 dev,stg,uat 环境创建数据库对象,而导致发布脚本本身没有得以验证正确性与完整性。
数据库发布的快捷性。
原本需要dev,stg,uat,prod 都重新部署一台新的服务器。之后,应用数据库发布脚本。现在只要竭尽全力构建一台正确可用的 docker 镜像,基于这份镜像,可以实现多个平台同时部署。而应用只需要指定相应的 doker 名即可。在多台集群环境中,这种部署手法给运维带来极大便利。还记得 Linux 的 ssh shell 嘛,发明远程无密登录就是为了能让运维在多个服务器之间穿梭,而不用一台台去安装软件了。在大数据当道,时不时要求上千台集群服务器的时下,docker 可以看做是一剂良药。
而这套流程,需要考虑的地方在于,生产环境的发布稍微不同。同样的发布脚本,但是数据库文件是游离于容器之外的。所以严格来说,不能以这样的方式去发布生产环境。必须从头至尾的,将数据库文件隔离于容器。在构建容器之时,先附加数据库文件到镜像,再应用发布脚本,最终构建发布版本的容器镜像。这样的构建脚本(Dockerfile)才具有可移植性。2 构建【数据库文件游离于容器镜像之外】的 SQL Server Docker 发布步骤如下:有了上面的经验,这次就简单很多了,就是对 Dockerfile 增加 Volume 指令的修改。本质上,是用 Volume 中的磁盘空间来存储数据库文件。
唯一不同的便是 dockerfile 的编写 和指定挂载的本地文件
#DockerfileFROMsqlserver/v1MAINTAINERLenisHuang"huangyun_122@163.com"ENVACCEPT_EULA=YENVSA_PASSWORD=1QAZ2wsx3EDC.ENVPATH=${PATH}:/opt/mssql/bin:/opt/mssql-tools/binRUNmkdirsqlfilesCOPYDBSchemaInit.sql./sqlfiles/DBSchemaInit.sqlCOPYsetup-database.sh./sqlfiles/setup-database.shCOPYentrypoint.sh./sqlfiles/entrypoint.shRUNchmoda+x./sqlfiles/setup-database.shRUNchmoda+x./sqlfiles/entrypoint.shVOLUME/sql/dataCMDbash./sqlfiles/entrypoint.sh
加了 VOLUME 指令用来指定所有挂载的本地文件都被挂载到 /sql/data 上。
[root@centos00v4]#mkdir-p/sql/data[root@centos00v4]#dockerrun-p1433--rm--name=dev_sqlv5-vsqlvolume:/sql/datasqlserver/v5[root@centos00data]#dockervolumeinspectsqlvolume[{"Driver":"local","Labels":null,"Mountpoint":"/var/lib/docker/volumes/sqlvolume/_data","Name":"sqlvolume","Options":{},"Scope":"local"}]
在 sqlvolume 指定的目录下面,我们可以看到任何被放在 docker 中 /sql/data 目录下的文件。当然我们也可以自己创建一个 volume 挂载上去。
到此,关于“发布SQL Server Docker有哪些方式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。