安装 SQL Server 2017 for Docker

1. 先决条件

2. 拉取

查找镜像

1
docker search mssql
1
2
3
4
5
NAME                                                  DESCRIPTION                                     STARS  
microsoft/mssql-server-linux Official images for Microsoft SQL Server on … 821
microsoft/mssql-server-windows-express Official Microsoft SQL Server Express Editio… 210
microsoft/mssql-server-windows-developer Official Microsoft SQL Server Developer Edit… 185
microsoft/mssql-tools Official images for Microsoft SQL Server Com… 28

查找镜像所有版本, 参阅 microsoft/mssql-server-linux, 或直接在 Docker Hub 搜索.

拉取镜像到本地

1
sudo docker pull microsoft/mssql-server-linux:2017-latest

2019-4-1 更新
旧镜像仓库将来不再使用,并且 SQL Server 2019 只能在新仓库中获取,新仓库地址为:

1
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest

镜像类型

Windows Container 分为 Windows Server Container 和 Hyper-V Isolation 两种类型, 只有 Hyper-V Ioslation 可以切换到 Linux 内核支持并通过管理工具或以下命令进行切换:

1
& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon

如果拉取镜像时发生错误:

failed to register layer: re-exec error: exit status 1: output: Failed to openRelative failed in Win32: open \?\C:\ProgramData\docker\windowsfilter\d7eb96ce7a91b0ecb676df1cbadfebec3c8ba82d84ddde7e1e5e7b451c02fb57\usr\share\man\man7\pam.7.gz: Cannot create a file when that file already exists. (0x1f) usr\share\man\man7\pam.7.gz

确保使用正确平台的 sqlsever 镜像.

通常, 使用 MicrosoftDockerProvider 安装的 Docker 为 Windows Server Container; 使用 Docker For Windows 安装的为 Hyper-V Isolation.
如果是 Hyper-V Isolation 类型容器, 可以在 Hyper-V 中查看到相应的 Docker 虚拟机.
使用 docker version 可以检查 docker container 类型:

Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:17:20 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm

Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Thu Apr 26 07:15:30 2018
OS/Arch: linux/amd64
Experimental: false

相关信息可以参阅 Windows Container Types.
尝试同时运行两种类型容器可以参阅 Run Linux and Windows Containers on Windows 10.

3. 运行

1
2
3
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
-p 1401:1433 --name sql1 `
-d microsoft/mssql-server-linux:2017-latest

2019-4-1 更新
在较新版本的 SQL Server 2017 中,”MSSQL_SA_PASSWORD” 改为 “SA_PASSWORD”,即与 Windows Container 的参数保持一致。

创建一个 Hyper-V Container 可以参阅 Hyper-V container.
默认运行版本为 Developer Edition. 运行生产版本参阅 Run production container images.

参数说明

参数 描述
-e ‘ACCEPT_EULA=Y’ ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
-e ‘MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>’ (新版本中为’SA_PASSWORD’) 指定至少包含 8 个字符且符合SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。
-p 1401:1433 建立主机环境(第一个值)上的 TCP 端口与容器(第二个值)中 TCP 端口的映射。 在此示例中,SQL Server 侦听容器中的 TCP 1433,并对主机上的端口 1401 公开。
–name sql1 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
microsoft/mssql-server-linux:2017-latest SQL Server 2017 Linux 容器映像。

密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下,密码必须为至少 8 个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 你可以通过执行 docker logs 命令检查错误日志。

对于运行于 windows container 的镜像, 指定密码的参数略有不同, 应使用 -e sa_password=<SA_PASSWORD>.

连接到容器

1
sudo docker exec -it <container name> "bash"

如果使用sqlcmd, 默认路径为 /opt/mssql-tools/bin/sqlcmd.

4. 参考链接

快速入门: 使用 Docker 运行 SQL Server 2017 容器映像
Run Linux and Windows Containers on Windows 10
microsoft/mssql-server-linux
microsoft/mssql-server-windows-developer
Windows Containers Documentation