先决条件
任何受支持的 Linux 发行版上的 Docker 引擎 1.8 及更高版本。
支持的Linux平台如下:
- Red Hat Enterprise Linux 8.0 - 8.6 Server
- SUSE Enterprise Linux Server v15 (SP1 - SP3)
- Ubuntu 20.04 LTS
- Linux 上的 Docker 引擎 1.8+
Docker部署
1. Docker镜像列表
2022-latest docker pull mcr.microsoft.com/mssql/server:2022-latest 2019-latest docker pull mcr.microsoft.com/mssql/server:2019-latest 2017-latest docker pull mcr.microsoft.com/mssql/server:2017-latest 2017-CU31-ubuntu-18.04docker pull mcr.microsoft.com/mssql/server:2017-CU31-ubuntu-18.042019-CU18-ubuntu-20.04docker pull mcr.microsoft.com/mssql/server:2019-CU18-ubuntu-20.04
2. 安装Docker
yum install docker
3. 下载镜像
docker pull mcr.microsoft.com/mssql/server:2017-latest
4. 启动Docker
docker run --name sql_server --hostname h1 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" -e "MSSQL_PID=Developer" -p 3433:1433 -d mcr.microsoft.com/mssql/server:2017-latest
5. 参数说明
- ACCEPT_EULA :将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。
- MSSQL_SA_PASSWORD:指定至少包含 8 个字符且符合 SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。
- MSSQL_COLLATION:指定自定义 SQL Server 排序规则,默认值 SQL_Latin1_General_CP1_CI_AS。
- 3433:1433:将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 3433 公开。
- name sql_server:为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。
- hostname h1:用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。
- -d:在后台运行容器(守护程序)。
- mcr.microsoft.com/mssql/server:2017-latest:SQL Server Linux 容器映像。
6. 查看docker 运行状态
# 列出所有运行的 docker 容器 [root@*****~]# docker ps Emulate Docker CLI using podman. Create/etc/containers/nodocker to quiet msg. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e41f4c2b485 mcr.microsoft.com/mssql/server:2017-latest /opt/mssql/bin/sq... 8 seconds ago Up 8 seconds ago 0.0.0.0:3433->1433/tcp sql_server # 进入docker 查看数据库文件 [root@****~]# docker exec -it 3e41f4c2b485 sh # ls -al /var/opt/mssql/data total 69568drwxr-xr-x 2 root root 192 Nov 708:45 . drwxr-xr-x 6 root root 59 Nov 708:37 .. -rw-r----- 1 root root 8388608 Nov 7 08:45 db01.mdf-rw-r----- 1 root root 8388608 Nov 7 08:45 db01_log.ldf-rw-r----- 1 root root 4194304 Nov 7 08:37 master.mdf-rw-r----- 1 root root 2097152 Nov 7 08:45 mastlog.ldf-rw-r----- 1 root root 8388608 Nov 7 08:45 model.mdf-rw-r----- 1 root root 8388608 Nov 7 08:45 modellog.ldf-rw-r----- 1 root root 14090240 Nov 7 08:37 msdbdata.mdf-rw-r----- 1 root root 524288 Nov 7 08:37 msdblog.ldf-rw-r----- 1 root root 8388608 Nov 7 08:37 tempdb.mdf-rw-r----- 1 root root 8388608 Nov 7 08:44 templog.ldf
安装 SQL Server 命令行工具
1. 下载 Red Hat 存储库配置文件。
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
2. 如果安装了早期版本的 mssql-tools,请删除所有旧的 unixODBC 包。
sudo yum remove unixODBC-utf16 unixODBC-utf16-devel
3. 运行以下命令,以使用 unixODBC 开发人员包安装 mssql-tools
sudo yum install -y mssql-tools unixODBC-devel
4. 为方便起见,将 /opt/mssql-tools/bin/ 添加到 PATH环境变量,以便可从 bash shell 访问 sqlcmd 或 bcp。
echo 'export PATH="$PATH:/opt/mssql-tools/bin"'>>~/.bash_profile
对于非交互式会话,请使用以下命令在~/.bashrc文件中修改PATH环境变量:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"'>>~/.bashrcsource ~/.bashrc
5. 查看sqlcmd 命令帮助文档
sqlcmd -?
通过SQLCMD 工具连接
- 使用 SQL Server 名称 (-S)、用户名 (-U) 和密码 (-P) 的相应参数运行 sqlcmd。 在本教程中,用户进行本地连接,因此服务器名称为 localhost。 用户名为 sa,密码是在安装过程中为 SA 帐户提供的密码。
sqlcmd -S localhost -U sa -P '<YourStrong@Passw0rd>'
- 如果成功,应会显示 sqlcmd 命令提示符:1>。
1. 命令连接示例
[root@****~]# sqlcmd -S localhost,3433-U sa -P <YourStrong@Passw0rd>1>select @@version;2>select @@SERVERNAME;3> go ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Microsoft SQL Server 2017(RTM-CU31)(KB5016884)-14.0.3456.2(X64) Sep 2202211:01:50 Copyright (C)2017 Microsoft Corporation Developer Edition (64-bit)on Linux (Ubuntu 18.04.6 LTS)(1 rows affected)--------------------------------------------------------------------------------------------------------------------------------h1 (1 rows affected)
2. 新建数据库
以下步骤创建一个名为TestDB的新数据库。
- 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
CREATE DATABASE TestDB;
- 在下一行中,编写一个查询以返回服务器上所有数据库的名称:
SELECT Name from sys.databases;GO
3. 插入数据
接下来创建一个新表dbo.Inventory,然后插入两个新行。
- 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:
USE TestDB;
- 创建名为 dbo.Inventory 的新表:
CREATETABLE dbo.Inventory( id INT, name NVARCHAR(50), quantity INT);
- 将数据插入新表:
INSERTINTO dbo.InventoryVALUES(1,'banana',150);INSERTINTO dbo.InventoryVALUES(2,'orange',154);
- 要执行上述命令的类型 GO:
GO
4. 查询数据
现在,运行查询以从dbo.Inventory表返回数据。
- 通过 sqlcmd 命令提示符输入查询,以返回 dbo.Inventory 表中数量大于 152 的行:
SELECT*FROM dbo.InventoryWHERE quantity >152;
- 执行此命令:
GO
5. 退出 sqlcmd 命令提示符
要结束 sqlcmd 会话,请键入 QUIT:
安全组
通过SSMS连接