• 作者:老汪软件技巧
  • 发表时间:2024-10-07 17:02
  • 浏览量:

前提条件搜索镜像

docker search mssql-server

拉取镜像

找到适合你的版本,拉取镜像,下面这个是我从官方文档里直接找到的镜像哇~

docker pull mcr.microsoft.com/mssql/server:2022-latest

运行容器,创建数据库方案一:使用docker run方式运行

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=tangdoudou.123" \
   -p 5433:1433 --name sqlserver01 --hostname sqlserver01 \
   -d \
   mcr.microsoft.com/mssql/server:2022-latest

数据持久化

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=tangdoudou.123' -p 5433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2022-latest

参数说明参数说明

-e "ACCEPT_EULA=Y"

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

-e "MSSQL_SA_PASSWORD=YourStrong@Passw0rd"

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

-e "MSSQL_COLLATION="

指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS。

-p 5433:1433

将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。 在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 5433 公开。

--name sqlserver01

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

--hostname sqlserver01

用于显式设置容器主机名。 如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。

-d

在后台运行容器(守护程序)。

/mssql/server:2022-latest

SQL Server Linux 容器映像。

更改系统管理员密码方案二:使用docker compose

如果想要获取docker compose安装教程,请参考我的另外一篇文章Docker系列-超级详细教你安装并使用docker compose,如何使用docker-compose安装sqlserver

创建服务文件

创建一个docker-compose.yml文件并定义SQL Server服务


version: '3.3'
services:
  sqlserver:
    image: mcr.microsoft.com/mssql/server:2022-latest
    container_name: mssql-server
    restart: always
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=tangdoudou.123
      - MSSQL_SA_PASSWORD=tangdoudou.123
    ports:
      - 5433:1433
    volumes:
      - ./sqlserver:/var/opt/mssql

安装执行

sudo docker compose up

安装成功

执行结果:

手把手非常详细图文并茂教你 Docker 部署 SQL Server__手把手非常详细图文并茂教你 Docker 部署 SQL Server

USER_01@xiaojinServer:/docker-compose$ sudo docker compose up -d
WARN[0000] /docker-compose/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
[+] Running 1/1Container mssql-server  Started                                                                                                                                                                        0.4s
USER_01@xiaojinServer:/docker-compose$

查看容器列表

docker ps -a

状态解释查看容器内的 SQL Server 错误日志:

docker exec -t sqlserver01 cat /var/opt/mssql/log/errorlog | grep connection

连接数据库方案一:使用可视化工具连接

下载DBever,连接数据库

方案一实际案例:

连接案例:

方案二:在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server

一般情况下,我们会使用可视化工具去连接数据库,如果你需要命令行方式连接的话,可以参考这个文档:

方案二实际案例:进入容器:

docker exec -it sqlserver01 "bash"

登录数据库,如果遇到certificate verify failed:self-signed certificate报错请参考下面的报错解决01。


/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123"

查询已经存在的数据库、查询数据库版本

SELECT name AS DatabaseName FROM sys.databases;
go

查询示例:

mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码"
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.
mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码" -No
1> SELECT name AS DatabaseName FROM sys.databases;
2> go
DatabaseName
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
(4 rows affected)
1> SELECT name AS DatabaseName FROM sys.databases;
2> fo
3> go
Msg 102, Level 15, State 1, Server d046613904c3, Line 2
Incorrect syntax near 'fo'.
1> select @@version
2> go
                                                                                                                                                                                                               
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2022 (RTM-CU15) (KB5041321) - 16.0.4145.4 (X64)
        Sep 19 2024 08:25:04
        Copyright (C) 2022 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>
(1 rows affected)
1>

报错解决01:

快速解决报错: SQL Server : SSL Provider: certificate verify failed:self-signed certificate

Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.

解决方案:使用-No:

-N[s|m|o]的解释说明:Set the connection encryption mode to be Strict, Mandatory, or Optional respectively. Defaults to mandatory if not specified. ([s|m|o] added in sqlcmd 18.0)

/opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123" -No

实际案例:

mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码"
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Client unable to establish connection. For solutions related to encryption errors, see https://go.microsoft.com/fwlink/?linkid=2226722.
mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码" -No
1> SELECT name AS DatabaseName FROM sys.databases;
2> go
DatabaseName
--------------------------------------------------------------------------------------------------------------------------------
master
tempdb
model
msdb
(4 rows affected)
1> SELECT name AS DatabaseName FROM sys.databases;
2> fo
3> go
Msg 102, Level 15, State 1, Server d046613904c3, Line 2
Incorrect syntax near 'fo'.
1> select @@version
2> go
                                                                                                                                                                                                               
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Microsoft SQL Server 2022 (RTM-CU15) (KB5041321) - 16.0.4145.4 (X64)
        Sep 19 2024 08:25:04
        Copyright (C) 2022 Microsoft Corporation
        Developer Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>
(1 rows affected)
1>

结语

欢迎大家指出文章需要改正之处~

学无止境,合作共赢

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~