千家信息网

发布SQL Server Docker有哪些方式

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"发布SQL Server Docker有哪些方式",在日常操作中,相信很多人在发布SQL Server Docker有哪些方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作
千家信息网最后更新 2026年11月02日发布SQL Server Docker有哪些方式

这篇文章主要介绍"发布SQL Server Docker有哪些方式",在日常操作中,相信很多人在发布SQL Server Docker有哪些方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"发布SQL Server Docker有哪些方式"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1 构建【数据库文件内建于容器镜像之内】的 SQL Server Docker 发布步骤如下:

1 Pull 一个最原始的 sql server docker 镜像

镜像来自于微软在 Docker Hub 上提供的初始容器。

2 编写第一版的数据库对象创建脚本

SQL 脚本:

CREATE DATABASE CRM GO USE CRM GO CREATE TABLE dbo.Account(    AccountId INT IDENTITY(1,1),    AccountName NVARCHAR(200) )

保存为 DBSchemaInit.sql

3 构建新容器镜像

构建自定义的容器镜像,最重要的是编写 Dockerfile.

[root@centos00 v1]# cat DockerfileFROM microsoft/mssql-server-linuxMAINTAINER Lenis Huang "huangyun_122@163.com"ENV ACCEPT_EULA=YENV SA_PASSWORD=1QAZ2WSX3EDCEXPOSE 1433

最终构建成功了:

[root@centos00 v1]# docker build -t=sqlserver/v1 .Sending build context to Docker daemon 3.584 kBStep 1/5 : FROM microsoft/mssql-server-linux ---> b2b20452a15bStep 2/5 : MAINTAINER Lenis Huang "huangyun_122@163.com" ---> Running in 532a5f141f11 ---> 182a1a9aed84Removing intermediate container 532a5f141f11Step 3/5 : ENV ACCEPT_EULA Y ---> Running in c72d741f2f8e ---> ee590cf78e2bRemoving intermediate container c72d741f2f8eStep 4/5 : ENV SA_PASSWORD 1QAZ2WSX3EDC ---> Running in 67559621fd8d ---> 7d92d6155c25Removing intermediate container 67559621fd8dStep 5/5 : EXPOSE 1433 ---> Running in 2bb8ee0440a4 ---> 67f770bfdacdRemoving intermediate container 2bb8ee0440a4Successfully built 67f770bfdacd[root@centos00 v1]# docker imagesREPOSITORY                               TAG                 IMAGE ID            CREATED             SIZEsqlserver/v1                             latest              67f770bfdacd        36 seconds ago      1.44 GB

至此,一份崭新的可用于项目部署的 sql server docker 构建完毕。

[root@centos00 DockerNginx]# docker psCONTAINER ID        IMAGE                          COMMAND                  CREATED              STATUS              PORTS                     NAMESf29258559cb4        sqlserver/v1                   "/opt/mssql/bin/sq..."   About a minute ago   Up 59 seconds       0.0.0.0:32793->1433/tcp   dev_sqlv1


从 docker ps 执行的结果中看到运行着 sqlv1 镜像的容器,可以通过本机的 32793 端口连接到容器中 sql server 服务对应的 1433 端口。

在 Dev, STG, UAT 环境,都以 sqlv1 为蓝本,使应用都连接到在 sqlv1 容器中运行的数据库。开发测试中出现任何问题,都可以拿着 sqlv1 重建一个新的容器来运行数据库。

4 开发新一版本的数据库应用,将其应用于 sqlv1 镜像,进而构建 sqlv2 镜像

# DockerfileFROM sqlserver/v1MAINTAINER Lenis Huang "huangyun_122@163.com"ENV ACCEPT_EULA=YENV SA_PASSWORD=1QAZ2wsx3EDC.ENV PATH=${PATH}:/opt/mssql/bin:/opt/mssql-tools/binRUN mkdir sqlfilesCOPY DBSchemaInit.sql ./sqlfiles/DBSchemaInit.sqlCOPY setup-database.sh ./sqlfiles/setup-database.shCOPY entrypoint.sh ./sqlfiles/entrypoint.shRUN chmod a+x ./sqlfiles/setup-database.shRUN chmod a+x ./sqlfiles/entrypoint.shCMD bash ./sqlfiles/entrypoint.sh# entrypoint.shecho 'starting database setup'./sqlfiles/setup-database.sh &/opt/mssql/bin/sqlservr# setup-database.shecho 'please wait while database is starting up ...'sleep 45secho 'try to connect to database in containder and create the sample db...'/opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U sa -P 1QAZ2wsx3EDC. -d master -i ./sqlfiles/DBSchemaInit.sqlecho 'sample db have been created!'

作为数据库部署,每次构建新容器,要关注的便是编写增量部署脚本,以替代第一次的数据库初始化脚本 DBSchemaInit.sql.

5 如此循环达到持续集成和发布

在这种发布流程中,要思考的问题是,如何在生产环境发布。

按照 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 的编写 和指定挂载的本地文件

# Dockerfile FROM sqlserver/v1MAINTAINER Lenis Huang "huangyun_122@163.com"ENV ACCEPT_EULA=YENV SA_PASSWORD=1QAZ2wsx3EDC.ENV PATH=${PATH}:/opt/mssql/bin:/opt/mssql-tools/binRUN mkdir sqlfilesCOPY DBSchemaInit.sql ./sqlfiles/DBSchemaInit.sqlCOPY setup-database.sh ./sqlfiles/setup-database.shCOPY entrypoint.sh ./sqlfiles/entrypoint.shRUN chmod a+x ./sqlfiles/setup-database.shRUN chmod a+x ./sqlfiles/entrypoint.shVOLUME /sql/dataCMD bash ./sqlfiles/entrypoint.sh

加了 VOLUME 指令用来指定所有挂载的本地文件都被挂载到 /sql/data 上。

[root@centos00 v4]# mkdir -p /sql/data[root@centos00 v4]# docker run -p 1433 --rm --name=dev_sqlv5 -v sqlvolume:/sql/data sqlserver/v5[root@centos00 data]# docker volume inspect sqlvolume[    {        "Driver": "local",        "Labels": null,        "Mountpoint": "/var/lib/docker/volumes/sqlvolume/_data",        "Name": "sqlvolume",        "Options": {},        "Scope": "local"    }]

在 sqlvolume 指定的目录下面,我们可以看到任何被放在 docker 中 /sql/data 目录下的文件。当然我们也可以自己创建一个 volume 挂载上去。

到此,关于"发布SQL Server Docker有哪些方式"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 数据库 容器 脚本 镜像 文件 环境 应用 方式 问题 学习 服务 生产 服务器 流程 运行 不同 多个 对象 就是 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 中关村互联网科技集团 美国互联网保险保险科技 与互联网科技公司 中国互联网科技发展 碳银互联网科技 九亚互联网科技 丰台科技园 互联网公司 中正互联网科技招聘 衡水科技产业互联网平台 深圳前海聚择互联网科技有限公司 北京大学互联网科技怎么样 金融科技与互联网金融相同和不同 新兴科技互联网创新大赛颁奖典礼 银川新华互联网科技学校联系电话 互联网科技公司营业执照怎么办理 九思连强互联网电子科技有限公司 上海乐五互联网科技有限公司 云南互联网科技学费 福仕德教育科技互联网 互联网科技活动banner 重生之互联网科技帝国 互联网科技有限公司图片 深圳互联网络科技有限公司 互联网科技媒体 唐信互联网科技 大连 米客互联网科技 互联网数据科技专业 北京市互联网新科技 长沙易易互联网科技有限公司
0