现在许多IT从业者都面临着同一个问题——为SQL Server这样的系统构建软件容器十分困难。这就是Dockerfiles出现的原因,它能够实现容器构建的自动化。 IT管理人员使用软件容器的用途之一,是用它们来部署后端数据库系统,如SQL Server。使用容器,你可以在几秒钟内部署一个新的数据库实例,使您的开发和操作更加敏捷和高效。
Dockerfile能够帮助你自动完成了容器的构建任务。请继续阅读这篇文章,你将了解如何使用Dockerfile简化SQL Server的Docker容器配置过程。 什么是Dockerfiles? 尽管Dockerfiles的具体命令需要花一些时间来熟悉,但Do……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
什么是Dockerfiles?
尽管Dockerfiles的具体命令需要花一些时间来熟悉,但Dockerfiles使用起来仍然是相当简单的。从本质上讲,Dockerfile只是一个没有文件扩展名的文本文件,它包含创建Docker映像的构建命令。反过来,这些镜像包含了运行应用程序或服务(如SQL Server)所需的软件层。使用Docker构建命令来运行Dockerfile,Docker将根据Dockerfile中的规范创建一个映像。 您可以把Dockerfile看作是Docker镜像的代码编译器。Dockerfiles使你能够快速轻松地重新创建特定的映像。此外,只要对Dockerfile进行一定更改,你就可以创建基于初始Dockerfile规范的派生镜像。为SQL Server 编写Dockerfile
图1 用于构建SQL Server容器的Dockerfile
在Dockerfiles中,以#字符开始的是注释行。它们可以用来对命令的作用进行注释。在本例中,我在注释中添加了使用映像所需的Docker构建和Docker运行命令的例子;在下一节中,我将进一步讨论这些命令。 接下来,FROM命令这一行,标识了将用于构建容器的基本映像;在本例中,是一个Microsoft映像,其中包含了Windows Server Core和一个预安装的SQL Server 2016 Express Edition实例。如果镜像不存在于本地存储库中,则将从Docker Hub (Docker Inc 公司提供的镜像仓库)中下载。 一旦映像被实例化,就可以使用RUN命令就来启动命令。如果该镜像是一个Windows镜像,例如这个例子中,你就需要使用某种类型的Windows命令,例如command shell或PowerShell命令。如果镜像是一个Linux映像,那么命令通常是Bash命令。 在图1中,使用PowerShell在名为SQLData的图像中创建一个目录。需要注意的是,运行语句中的命令将在容器映像中运行,而不是在主机系统中运行。Dockerfile中的这些命令是在容器映像中执行的,它们让你能够使用你想要的属性来构建容器映像。 接下来,两个COPY命令用于将文件从Dockerfile的安装目录复制到映像中新创建的SQLData目录。第一个命令复制示例AdventureWorks 2014数据库的AdventureWorks2014_Data.mdf文件,第二行复制AdventureWorks2014_Log.ldf文件。注意,复制命令可以包含*和?通配符,?用于替代单个字符。例如,如果您想要将多个MDF和LDF文件复制到c:\目录中,您可以使用以下命令: COPY *.mdf C:/ COPY *.ldf C:/ 本例中,Dockerfile中拷贝的数据和日志文件组成AdventureWorks2014数据库。这让AdventureWorks 2014数据库在容器启动时能够自动连接。 最后,EXPOSE命令用于在主机系统上打开TCP端口1433;这是SQL Server使用的默认端口。端口1433是SQL Server使用的默认端口。开放端口1433允许使用SQL Server管理Studio远程访问容器中的SQL服务器实例,网络上的系统和其他应用程序和管理工具都可以通过该端口访问数据库实例。使用Dockerfile构建镜像
虽然这个示例相对简单,实际的Dockerfiles可以会比这个复杂一些,它有一组针对自定义Docker容器配置的冗长规范。使用Docker构建命令来依照这些规范创建新的镜像。 接下来,导航到包含Dockerfile和其他安装文件(如AdventureWorks2014_Data.mdf AdventureWorks2014_Log.ldf)的目录,然后执行如下命令: cd c:\sqlexpressbuild docker build -t sqlexpress . 在本例中,正如你看到的那样,- t(或tag)参数用于将新镜像命名为sqlexpress。“.”表示使用当前目录将用于构建操作。创建新映像之后,可以使用Docker映像命令列出可用的镜像,如图2所示。图2 本地存储库中可用的Docker镜像列表
这个时候,你已经准备好根据新的标准镜来构建多个容器。您可以通过下面的Docker运行命令启动容器: docker run -d -e sa_password=9a55w0rd#1 -e ACCEPT_EULA=Y -e attach_dbs="[{'dbName':'AdventureWorks2014','dbFiles':['C:\\SQLData\\AdventureWorks2014_Data.mdf','C:\\SQLData\\AdventureWorks2014_Log.ldf']}]" sqlexpress 该命令使用- d参数来表名容器将以分离模式运行——这意味着它将在后台运行,而且它将不具备自己的UI——当容器启动时不会打开窗口。相反的,它将作为一个后台进程运行。- e sa_password参数为内置系统管理员帐户提供初始密码。需要使用- e ACCEPT_EULA = Y参数来接受软件许可协议并启动SQL Server Express容器。- e attach_dbs参数用于附加AdventureWorks 2014数据库,它的相关文件将被复制到容器中。 使用Dockerfiles可以实现SQL Server的Docker容器配置和部署流程的自动化和标准化。对于开发人员来说,使用SQL Server容器是非常有好处的,因为它们使您能够在几秒钟内运行新的SQL Server实例,快速使用使用数据库,不需要等待任何冗长的安装或恢复过程。作者
翻译
TechTarget特邀编辑。北京邮电大学计算机科学与技术专业硕士。熟悉软件开发流程,对系统管理,网络配置,数据库应用等方面有深入的理解和实践经验。现就职于IBM(中国)投资有限公司,从事IBM服务器相关软件的开发工作。业余时间喜欢游泳登山,爱健身,喜欢结交朋友。