本文将引导你完成创建、将定制的SQL Server镜像导入Azure Container Registry,并最终使用它部署Azure Container实例的过程。
简介
Azure容器实例对开发人员来说非常方便,他们可以在Azure容器上创建一个SQL Server实例,以便迅速进行开发和测试。在文章中(底部的TOC),我们在容器实例中使用了SQL Server on Linux 2019镜像。这些镜像是微软为2017和2019的不同SQL版本提供的标准。假设你需要为你的SQL实例进行一些特定的配置或用户数据库。你需要用这些标准镜像配置每个实例或你从标准镜像部署的每个实例。因此,对你来说,在许多容器上重复这个过程可能是一个问题。
在这篇文章中,我们将看一下以下几点。
- 从标准镜像中创建自定义的SQL Server镜像
- 将定制的镜像导入到Azure容器注册表中
- 为Azure容器实例部署定制的镜像
让我们先来看看满足指定任务所需的各种步骤。
从标准镜像中为Azure容器实例创建定制的SQL Server镜像
这一步是导入Linux上的标准SQL Server镜像,并通过一些配置变更和用户数据库对其进行定制。
在Ubuntu Linux上安装Docker
要在Ubuntu Linux上安装docker,启动终端并按照下面的步骤进行。
- 使用apt软件包通过HTTPS安装存储库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

- 使用Curl命令来添加Docker的官方GPG密钥。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

- 使用以下lsb_release -cs设置使用docker下载URL的稳定仓库
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

- 安装最新版本的docker引擎
sudo apt-get install docker-ce docker-ce-cli containerd.io

- 在docker容器上使用标准的SQL Server on Linux资源库。我们在这个演示中使用SQL Server 2019 CU12版本。
sudo docker pull mcr.microsoft.com/mssql/server:2019-CU12-ubunutu-20.04
它从MCR资源库中下载资源库镜像。

- 使用docker运行命令在Linux实例上运行SQL Server
在脚本中,我们指定以下参数。
- ACCEPT_EULA= Y: 接受许可条件
- SA_PASSWORD: 指定连接到SQL Server实例的SA密码
- -p:将容器上的TCP端口与主机实例进行映射
- -name:是容器的名称
sudo docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=India@123" \
-p 1433:1433 --name sqlshackdemo \
-d mcr.microsoft.com/mssql/server:2019-CU12-ubuntu:20.04
docker run命令用指定的配置来配置SQL Server,并返回容器GUID。 你可以用命令--docker ps -a来检查docker的状态。

你可以在Ubuntu上安装Azure Data Studio,以便在Linux上连接到SQL Server。导航到URL,下载ADS并配置它。

在Azure Data Studio中,为连接输入以下细节。
- 服务器:localhost
- 认证。SQL认证
- 用户ID。SA
- 密码:如docker_run命令中指定的。
如下图所示,我们在Linux 15.0.4153.1版本和开发者版本上有一个活跃的SQL Server实例。

定制SQL Server容器镜像
我们在docker容器中安装了Linux上SQL Server的标准镜像。假设我们想在其中部署一个SQL Server数据库和对象。稍后,我们将用这个用户数据库建立一个定制的docker容器镜像。
下面的脚本创建了一个数据库[SQLShackDemo]和一个有一条记录的表[Emp]。
Create Database SQLShackDemo
GO
Use SQLShackDemo
Go
Create table Emp
(
id INT,
name varchar(20)
)
GO
Use SQLShackDemo
Go
Insert into emp values(1,'Raj')

为了建立自定义的镜像,我们需要停止并提交容器镜像。
docker stop sqlshackdemo
如下图所示,容器的状态是退出的。

docker commit命令将容器镜像保存在本地。它返回容器的GUID,如下图所示。
docker commit sqlshackdemo

使用docker images来列出本地安装的镜像。我们有一个镜像,在仓库和TAG中没有指定。它是我们最近使用docker commit提交的镜像。

在我们继续前进之前,请浏览URLhub.docker.com/signup,并设置一个容器账户和存储库。
在这篇文章中,我设置了存储库sqlshackcontainerdemo,如下图所示。

我们需要使用docker tag命令添加标签,使用docker image返回的image id。它还使用了我们要保存自定义图像的docker hub仓库。
docker tag dba221b61657 rajendragupta16/sqlshackcontainerdemo:mydemo

将定制的镜像导出到docker hub中
我们将导出并保存定制的镜像到我们的docker hub账户。要导出,首先使用docker login命令登录到docker。
docker login –username rajendragupta16
它将密码以加密的形式存储在/root/.docker/config.json文件中。

使用以下格式的docker push命令。
docker push [dockerhubrepositry]:tag
因此,我推送自定义图像的命令如下
docker push rajendragupta16/sqlshackcontainerdemo:mydemo
它开始将定制的docker容器镜像上传到指定的docker账户。

一旦上传成功到docker容器中,状态就会变成推送。

刷新docker账户,就可以查看容器镜像了。

微软有Azure容器注册中心,用于托管docker镜像和其他相关工件。你可以使用这些镜像进行基于容器的部署,类似于普通镜像。
在Azure门户中,搜索Azure Container Registry。它会显示以下容器注册处的页面。

在容器注册表中,输入以下值。
- 注册表名称
- 位置
- SKU。你可以从基本、标准或高级服务层中选择。你可以参考
docs.microsoft.com/en-us/azure…,了解Azure容器注册中心的服务层级。

高级SKU可以使用私有端点和客户管理的SKU。对于标准SKU,我们使用带有访问密钥的公共端点。


一旦Azure容器注册处实例被部署,请记下登录服务器。 
我们还需要容器注册处的访问密钥。点击容器注册处仪表板上的访问键,启用管理员用户。记下容器注册处的用户名和密码。

使用docker登录命令来验证访问密钥。在docker登录命令中,我们需要指定以下值。
- 登录服务器
- 用户名
- 密码
docker login sqlshackdemoreg.azurecr.io

为了将定制的镜像推送到Azure容器注册表中,我们需要用Azure登录服务器名称来标记容器镜像。我们需要一个带有我们在几个命令之前检索的登录服务器和镜像名称的镜像标签。
sudo docker tag rajendragupta16/sqlshackcontainerdemo:mydemo sqlshackdemoreg.azurecr.io/sqlshackdemoreg:mydemo
在这个命令中,我们有以下值。
- docker容器镜像:rajendragupta16/sqlshackcontainerdemo:mydemo
- Azure登录服务器标签:sqlshackdemoreg.azure.io/sqlshackdemoreg:mydemo
一旦图像标签设置完毕,使用docker图像,并验证存储库和TAG值。

现在,我们可以把存储在docker账户中的自定义镜像推送到Azure容器注册表。
sudo docker push sqlshackdemoreg.azurecr.io/sqlshackdemoreg:mydemo
它开始推送镜像,并在输出中返回存储库的详细信息和大小,如下图所示。


导航到容器注册表,验证定制的镜像是否存在。仪表板也会返回存储库、标签、平台和docker pull命令。

你也可以使用Azure CLI命令--az acr repository list来获取存储库列表。
az acr repository list –name sqlshackdemoreg –output table

使用Azure容器注册表镜像部署Azure容器实例
在文章中(TOC在底部),我们使用标准的docker镜像部署了SQL Server 2019 Linux。如前所述,我们有定制镜像的要求,以便每次部署时,我们都有用户数据库和对象。
在Azure容器实例配置页面,选择选项 - Azure容器注册表。它会自动填充注册表、镜像和标签的信息。

在审查和验证页面,验证以下数值。
- 图像注册表的登录服务器
- 图像
- 图像注册表的用户名
- 操作系统类型

点击创建以部署Azure容器实例,并使用公共IP地址或FQDN连接到SQL Server。

如下图所示,我们有一个用户数据库[SQLShackDemo],其中有一个表[Emp]。

该表有一条记录,我们插入该记录用于定制SQL Server容器镜像。

总结
在这篇文章中,我们探讨了定制容器镜像并将其上传到Azure镜像注册表。你可以使用定制的注册表,按照你的标准部署带有数据库、对象和配置的容器。 它可以帮助你节省时间,在每次建立新的容器实例时部署数据库、它们的最佳实践和配置。