打开terminal搜索镜像并下载

localhost:~ neil$ docker search mssql
NAME                                                  DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
microsoft/mssql-server-linux                          Deprecated SQL Server on Linux Container Rep…   1169                                    
microsoft/mssql-server-windows-developer              Official Microsoft SQL Server Developer Edit…   393                                     
microsoft/mssql-server-windows-express                Official Microsoft SQL Server Express Editio…   346                                     
microsoft/mssql-tools                                 Official images for Microsoft SQL Server Com…   51                                      
rsmoorthy/mssql                                       MSSQL Database (version SQL2000)                12                                      [OK]
datagrip/mssql-server-linux                           SQL Server and SQL Server tools on Linux(201…   9                                       [OK]
gantrior/mssql-server-2014-express-windows-with-iis   mssql 2014 + IIS                                5                                       
bitwarden/mssql                                       The Bitwarden database.                         4                                       
mcmoe/mssqldocker                                     Builds on microsoft/mssql-server-linux and a…   3                                       [OK]
microsoft/mssql-monitoring-influxdb                   Sample Image for Influxdb, This image is des…   3                                       
tsgkadot/mssql-tools                                  SQL Server tools on Linux (sqlcmd)              3                                       [OK]
ansibleplaybookbundle/mssql-apb                       MS SQL Server on Linux (APB)                    2                                       [OK]
dhwanilraval/mssql-docker-rhel-official               SQL Server in Docker                            1                                       [OK]
christianacca/mssql-server-windows-express            Fork of official microsoft/mssql-server-wind…   1                                       
ansibleplaybookbundle/mssql-remote-apb                An APB that deploys Microsoft SQL Server        1                                       [OK]
microsoft/mssql-monitoring-collectd                   This Sample image is designed to work with t…   1                                       
tchughesiv/mssql-server-linux                         CentOS build                                    0                                       [OK]
astronomerio/mssql-source                             MSSQL source.                                   0                                       [OK]
uwthalesians/mssql                                    Mssql Database Server for Perceptia             0                                       
softwareplant/mssql                                   SQL Server test database                        0                                       [OK]
iconviet/mssql                                                                                        0                                       
liaisonintl/mssql-server-linux                        mssql-server-linux                              0                                       [OK]
veermuchandi/mssqlcli                                                                                 0                                       
agiper/mssql                                                                                          0                                       
plever/mssql-server-linux-plus                        Adding additional tooling to the base sql se…   0

可以看到microsoft下面mssql的不同平台的版本:

microsoft/mssql-server-linux                          Deprecated SQL Server on Linux Container Rep…   1169                                    
microsoft/mssql-server-windows-developer              Official Microsoft SQL Server Developer Edit…   393                                     
microsoft/mssql-server-windows-express                Official Microsoft SQL Server Express Editio…   346

选择需要的版本pull到本地:

localhost:~ neil$ docker pull microsoft/mssql-server-linux
Using default tag: latest
latest: Pulling from microsoft/mssql-server-linux
59ab41dd721a: Pull complete 
57da90bec92c: Pull complete 
06fe57530625: Pull complete 
5a6315cba1ff: Pull complete 
739f58768b3f: Pull complete 
0b751601bca3: Pull complete 
bcf04a22644a: Pull complete 
6b5009e4f470: Pull complete 
a9dca2f6722a: Pull complete 
Digest: sha256:9b700672670bb3db4b212e8aef841ca79eb2fce7d5975a5ce35b7129a9b90ec0
Status: Downloaded newer image for microsoft/mssql-server-linux:latest
docker.io/microsoft/mssql-server-linux:latest

创建并运行容器

localhost:~ neil$ docker run --name MSSQL_1433 -m 512m -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Mssql@root' -p 1433:1433 -d microsoft/mssql-server-linux
f310ca4f0e7f6a9d98582c1c660dfd0d31c092ced96a727f38e528952fdc13d1

对参数进行说明:

参数

描述

-e 'ACCEPT_EULA=Y'

将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。

-e 'SA_PASSWORD=<YourStrong!Passw0rd>'

指定至少包含 8 个字符且符合 SQL Server 密码要求的强密码。 SQL Server 映像的必需设置。

-p 1433:1433

建立主机环境(第一个值)上的 TCP 端口与容器(第二个值)中 TCP 端口的映射。 在此示例中, SQL Server 侦听容器中的 TCP 1433, 此端口公开给主机上的端口1433。

--name sql1

为容器指定一个自定义名称,而不是使用随机生成的名称。 如果运行多个容器,则无法重复使用相同的名称。

mcr.microsoft.com/mssql/server:2017-latest

SQL Server 2017 Linux 容器映像。

登入容器并连接到sqlcmd

localhost:~ neil$ docker exec -it MSSQL_1433 /bin/bash
root@0056b240511a:/# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Mssql@root'
1>

要查看 Docker 容器可使用 docker ps 命令:

localhost:~ neil$ docker ps -a
CONTAINER ID        IMAGE                            COMMAND                  CREATED             STATUS                      PORTS                                      NAMES
0056b240511a        microsoft/mssql-server-linux     "/opt/mssql/bin/sqls…"   4 minutes ago       Up 4 minutes                0.0.0.0:1433->1433/tcp                     MSSQL_1433
f7b7b07bc6af        ubuntu                           "/bin/bash"              13 days ago         Exited (255) 43 hours ago                                              ubuntu-test
4cf9172d5715        deepdiver/docker-oracle-xe-11g   "/bin/sh -c 'sed -i …"   13 days ago         Exited (255) 10 days ago    22/tcp, 8080/tcp, 0.0.0.0:1521->1521/tcp   oracle11g

更改 SA 密码

示例:使用 docker exec 运行sqlcmd ,以使用 Transact-SQL 更改密码。 在下面的示例中, 将旧密码<YourStrong!Passw0rd>和新<YourNewStrong!Passw0rd>密码替换为你自己的密码值。

sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
     -S localhost -U SA -P "<YourStrong!Passw0rd>" \
     -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong!Passw0rd>"'

执行修改密码如下: 

localhost:~ neil$ docker exec -it MSSQL_1433 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Qwe!@#123' -Q 'ALTER LOGIN SA WITH PASSWORD="Mssql@root"'

连接到 SQL Server

下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 来连接 SQL Server。

  1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name参数指定的名称。
sudo docker exec -it MSSQL_1433 "bash"
  1. 一旦位于容器内部,使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong!Passw0rd>"

 提示:可以省略命令行上提示要输入的密码。

  1. 如果成功,应会显示 sqlcmd 命令提示符:1>

创建和查询数据

以下部分将引导你使用 sqlcmd 和 Transact-SQL 完成新建数据库、添加数据并运行简单查询的整个过程。

新建数据库

以下步骤创建一个名为 TestDB 的新数据库。

  1. 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
CREATE DATABASE TestDB
  1. 在下一行中,编写一个查询以返回服务器上所有数据库的名称:
SELECT Name from sys.Databases
  1. 前两个命令没有立即执行。 必须在新行中键入 GO 才能执行以前的命令:
GO

插入数据

接下来创建一个新表 Inventory,然后插入两个新行。

  1. 在 sqlcmd 命令提示符中,将上下文切换到新的 TestDB 数据库:
USE TestDB
  1. 创建名为 Inventory 的新表:
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
  1. 将数据插入新表:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
  1. 要执行上述命令的类型 GO
GO

选择数据

现在,运行查询以从 Inventory 表返回数据。

  1. 通过 sqlcmd 命令提示符输入查询,以返回 Inventory 表中数量大于 152 的行:
SELECT * FROM Inventory WHERE quantity > 152;
  1. 执行命令:
GO

退出 sqlcmd 命令提示符

  1. 要结束 sqlcmd 会话,请键入 QUIT
QUIT
  1. 要在容器中退出交互式命令提示,请键入 exit。 退出交互式 Bash Shell 后,容器将继续运行。

从容器外连接

还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。

以下步骤在容器外使用 sqlcmd 连接在容器中运行的 SQL Server。 这些步骤假定你已在容器外安装了 SQL Server 命令行工具。 使用其他工具时, 相同的原则同样适用, 但连接过程对于每个工具都是唯一的。

  1. 查找承载容器的计算机的 IP 地址。 在 Linux 上,使用 ifconfig 或 ip addr。在 Windows 上,使用 ipconfig。
  2. 对于本示例, 请在客户端计算机上安装sqlcmd工具。 有关详细信息, 请参阅在 Windows 上安装 sqlcmd在 Linux 上安装 sqlcmd
  3. 运行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。 在此示例中, 这是主机上的相同端口1433。 如果在主机计算机上指定了其他映射端口, 则可在此处使用。
sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong!Passw0rd>"
  1. 运行 Transact-SQL 命令。 完成后,键入 QUIT

连接到 SQL Server 的其他常见工具包括:

Visual Studio Code

适用于 Windows 的 SQL Server Management Studio (SSMS)

Azure Data Studio

mssql-cli(预览版)

PowerShell Core

删除容器

如果想删除本教程中使用的 SQL Server 容器,请运行以下命令:

sudo docker stop MSSQL_1433
sudo docker rm MSSQL_1433