先决条件
- 任何受支持的 Linux 分发或用于 Mac/Windows 的 Docker 上的 Docker 引擎 1.8+。 有关详细信息,请参阅 Install Docker(安装 Docker)。
- Docker overlay2 存储驱动程序。 这是大多数用户的默认设置。 如果发现自己未使用此存储提供程序并且需要进行更改,请参阅 docker 文档中有关配置 overlay2 的说明和警告。
- 至少 2 GB 的磁盘空间。
- 至少 2 GB 的 RAM。
- Linux 上的 SQL Server 的系统要求。
拉取并运行容器映像
在开始执行以下步骤之前,请确保已在本文顶部选择了首选的 shell(bash、PowerShell 或 cmd)。
-
从 Microsoft 容器注册表中拉取 SQL Server 2017 Linux 容器映像。
sudo docker pull mcr.microsoft.com/mssql/server:2017-latest
-
前一个命令请求最新的 SQL Server 2017 容器映像。 如果想请求某个特定映像,需添加一个冒号和标记名称(例如
mcr.microsoft.com/mssql/server:2017-GA-ubuntu
。 若要查看所有可用映像,请参阅 mssql-server Docker hub 页。对于本文中的 bash 命令,将使用
sudo
。 在 MacOS 上,可能不需要sudo
。 在 Linux 上,如果不想使用sudo
来运行 Docker,可以配置一个 docker 组,并将用户添加到该组。 有关详细信息,请参阅 Post-installation steps for Linux(适用于 Linux 的安装后步骤)。 -
要使用 Docker 运行容器映像,可以从 Bash Shell (Linux/macOS) 或提升的 PowerShell 命令提示符使用以下命令。
sudo docker run --restart always -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=password' -e 'MSSQL_PID=Developer' -p 1333:1433 --name sql2017 -v /data/sqlserver2017_data:/var/opt/mssql -d microsoft/mssql-server-linux
备注
密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下,密码的长度必须至少为 8 个字符,并且必须包含以下四种字符中的三种:大写字母、小写字母、十进制数字和符号。 你可以通过执行 docker logs 命令检查错误日志。
备注
默认情况下,这会创建一个使用 SQL Server 2017 开发人员版的容器。 在容器中运行生产版本的过程略有不同。 有关详细信息,请参阅运行生产容器映像。
下表对前一个 docker run
示例中的参数进行了说明:
参数 | 说明 |
---|---|
-e "ACCEPT_EULA=Y" | 将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。 |
-e "SA_PASSWORD= |
指定至少包含 8 个字符且符合 SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。 |
-p 1433:1433 | 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,并对主机上的端口 1433 公开。 |
--name sql1 | 为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。 |
-d mcr.microsoft.com/mssql/server:2017-latest | SQL Server 2017 Linux 容器映像。 |
注:
-v /data/sqlserver2017_data:/var/opt/mssql 表示将docker的/var/opt/mssql挂载到宿主机的/data/sqlserver2017_data目录
要查看 Docker 容器,请使用 docker ps
命令。
sudo docker ps -a
如果“状态”列显示“正常运行”,则 SQL Server 将在容器中运行,并侦听“端口”列中指定的端口 。 如果 SQL Server 容器的“状态”列显示“已退出”,则参阅配置指南的疑难解答部分 。
连接到 SQL Server
下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 来连接 SQL Server。
-
使用
docker exec -it
命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1
是在创建容器时由--name
参数指定的名称。
sudo docker exec -it sql2017 "bash"
坑:
一定要挂载/var/opt/mssql目录到宿主机,这样就可以使用SQL Server Management Studio连接数据库备份还原,否则各种权限坑。
参考文档:
https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker?view=sql-server-2017&pivots=cs1-bash