打开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。
- 使用
docker exec -it
命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1
是在创建容器时由--name
参数指定的名称。
sudo docker exec -it MSSQL_1433 "bash"
- 一旦位于容器内部,使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong!Passw0rd>"
提示:可以省略命令行上提示要输入的密码。
- 如果成功,应会显示 sqlcmd 命令提示符:
1>
。
创建和查询数据
以下部分将引导你使用 sqlcmd 和 Transact-SQL 完成新建数据库、添加数据并运行简单查询的整个过程。
新建数据库
以下步骤创建一个名为 TestDB
的新数据库。
- 在 sqlcmd 命令提示符中,粘贴以下 Transact-SQL 命令以创建测试数据库:
CREATE DATABASE TestDB
- 在下一行中,编写一个查询以返回服务器上所有数据库的名称:
SELECT Name from sys.Databases
- 前两个命令没有立即执行。 必须在新行中键入
GO
才能执行以前的命令:
GO
插入数据
接下来创建一个新表 Inventory
,然后插入两个新行。
- 在 sqlcmd 命令提示符中,将上下文切换到新的
TestDB
数据库:
USE TestDB
- 创建名为
Inventory
的新表:
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
- 将数据插入新表:
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
- 要执行上述命令的类型
GO
:
GO
选择数据
现在,运行查询以从 Inventory
表返回数据。
- 通过 sqlcmd 命令提示符输入查询,以返回
Inventory
表中数量大于 152 的行:
SELECT * FROM Inventory WHERE quantity > 152;
- 执行命令:
GO
退出 sqlcmd 命令提示符
- 要结束 sqlcmd 会话,请键入
QUIT
QUIT
- 要在容器中退出交互式命令提示,请键入
exit
。 退出交互式 Bash Shell 后,容器将继续运行。
从容器外连接
还可以从支持 SQL 连接的任何 Linux、Windows 或 macOS 外部工具连接到 Docker 计算机上的 SQL Server 实例。
以下步骤在容器外使用 sqlcmd 连接在容器中运行的 SQL Server。 这些步骤假定你已在容器外安装了 SQL Server 命令行工具。 使用其他工具时, 相同的原则同样适用, 但连接过程对于每个工具都是唯一的。
- 查找承载容器的计算机的 IP 地址。 在 Linux 上,使用 ifconfig 或 ip addr。在 Windows 上,使用 ipconfig。
- 对于本示例, 请在客户端计算机上安装sqlcmd工具。 有关详细信息, 请参阅在 Windows 上安装 sqlcmd或在 Linux 上安装 sqlcmd。
- 运行 sqlcmd,指定 IP 地址和映射容器中的端口 1433 的端口。 在此示例中, 这是主机上的相同端口1433。 如果在主机计算机上指定了其他映射端口, 则可在此处使用。
sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong!Passw0rd>"
- 运行 Transact-SQL 命令。 完成后,键入
QUIT
。
连接到 SQL Server 的其他常见工具包括:
适用于 Windows 的 SQL Server Management Studio (SSMS)
删除容器
如果想删除本教程中使用的 SQL Server 容器,请运行以下命令:
sudo docker stop MSSQL_1433
sudo docker rm MSSQL_1433