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

打印 上一主题 下一主题

主题 997|帖子 997|积分 2991

前提条件



  • linux服务器
  • 服务器装好了Docker 引擎 1.8 及更高版本
  • 至少 2 GB 的磁盘空间
  • 至少 2 GB 的 RAM
搜刮镜像

  1. docker search mssql-server
复制代码
拉取镜像

找到适合你的版本,拉取镜像,下面这个是我从官方文档里直接找到的镜像哇~
  1. docker pull mcr.microsoft.com/mssql/server:2022-latest
复制代码
运行容器,创建数据库



  • 暗码应符合 SQL Server 默认暗码策略,否则容器无法设置 SQL Server,会停止工作。 默认情况下,暗码必须为至少八个字符且包罗以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 可利用 docker logs 命令检查错误日记。
  • 假设你的暗码为tangdoudou.123
方案一:利用docker run方式运行

  1. docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=tangdoudou.123" \
  2.    -p 5433:1433 --name sqlserver01 --hostname sqlserver01 \
  3.    -d \
  4.    mcr.microsoft.com/mssql/server:2022-latest
复制代码
数据持久化



  • 假如需要实现即使在容器停止后文件也能持久生存,可以在上面命令后添加 -v sqlvolume:/var/opt/mssql,此中sqlvolume就是宿主机的一个文件挂载名称,冒号后边的是容器内的目录,如许写得话数据将会被存储在宿主机保留,避免数据丢失。
  • docker run命令时,您可以利用-v标记指定要利用的卷。这称为卷挂载。假如该卷不存在,docker 会为您创建一个(将在/var/lib/docker/volumes目录中创建一个卷)。现在,即使容器被销毁,数据也会保留在卷中
  • 假如想要详细了解数据挂载详情资料,可以参考我的另一篇文章讲解Docker系列-超详细讲解docker的5种数据持久化,volume,bind mounts,NFS等
    例如:
  1. 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_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在背景运行容器(守卫程序)。mcr.microsoft.com/mssql/server:2022-latestSQL Server Linux 容器映像。 更改系统管理员暗码



  • 假如数据库用于测试环境的话,此步骤可以忽略不计,假如有需要的话,请参考这里更改系统管理员暗码
  • SA 帐户是安装过程中在 SQL Server 实例上创建的系统管理员。 创建 SQL Server 容器后,可以通过在容器中运行 echo $MSSQL_SA_PASSWORD 来发现指定的 MSSQL_SA_PASSWORD 环境变量。 为了安全起见,应在生产环境中更改 SA 暗码。
方案二:利用docker compose

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

创建一个docker-compose.yml文件并界说SQL Server服务
  1. version: '3.3'
  2. services:
  3.   sqlserver:
  4.     image: mcr.microsoft.com/mssql/server:2022-latest
  5.     container_name: mssql-server
  6.     restart: always
  7.     environment:
  8.       - ACCEPT_EULA=Y
  9.       - SA_PASSWORD=tangdoudou.123
  10.       - MSSQL_SA_PASSWORD=tangdoudou.123
  11.     ports:
  12.       - 5433:1433
  13.     volumes:
  14.       - ./sqlserver:/var/opt/mssql
复制代码
安装执行

  1. sudo docker compose up
复制代码
安装成功

执行结果:
  1. USER_01@xiaojinServer:/docker-compose$ sudo docker compose up
  2. -dWARN[0000] /docker-compose/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion[+] Running 1/1 ✔ Container mssql-server  Started                                                                                                                                                                        0.4sUSER_01@xiaojinServer:/docker-compose$
复制代码
查看容器列表

  1. docker ps -a
复制代码
状态表明



  • 假如 STATUS 列显示 Up 状态,则 SQL Server 正在容器中运行,并且在侦听 PORTS 列中指定的端口。
  • 假如 SQL Server 容器的 STATUS 列显示 Exited,请参阅 SQL Server Docker 容器故障排除。
  • 一旦 SQL Server 错误日记显示消息(SQL Server is now ready for client connections. This is an informational message; no user action is required。 )就可毗连此服务器。
查看容器内的 SQL Server 错误日记:

  1. docker exec -t sqlserver01 cat /var/opt/mssql/log/errorlog | grep connection
复制代码
毗连数据库

方案一:利用可视化工具毗连

下载DBever,毗连数据库
方案一现实案例:

毗连案例:


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

一般情况下,我们会利用可视化工具去毗连数据库,假如你需要命令行方式毗连的话,可以参考这个文档:在容器内部利用 SQL Server 命令行工具 sqlcmd 实用程序 来毗连 SQL Server
方案二现实案例:

进入容器:

  1. docker exec -it sqlserver01 "bash"
复制代码

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

  1. /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123"
复制代码
查询已经存在的数据库、查询数据库版本

  1. SELECT name AS DatabaseName FROM sys.databases;
  2. go
复制代码
查询示例:
  1. mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码"
  2. Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
  3. 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.
  4. mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码" -No
  5. 1> SELECT name AS DatabaseName FROM sys.databases;
  6. 2> go
  7. DatabaseName
  8. --------------------------------------------------------------------------------------------------------------------------------
  9. master
  10. tempdb
  11. model
  12. msdb
  13. (4 rows affected)
  14. 1> SELECT name AS DatabaseName FROM sys.databases;
  15. 2> fo
  16. 3> go
  17. Msg 102, Level 15, State 1, Server d046613904c3, Line 2
  18. Incorrect syntax near 'fo'.
  19. 1> select @@version
  20. 2> go
  21.                                                                                                                                                                                                                
  22. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  23. Microsoft SQL Server 2022 (RTM-CU15) (KB5041321) - 16.0.4145.4 (X64)
  24.         Sep 19 2024 08:25:04
  25.         Copyright (C) 2022 Microsoft Corporation
  26.         Developer Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>
  27. (1 rows affected)
  28. 1>
复制代码
报错解决01:

快速解决报错: SQL Server : SSL Provider: certificate verify failed:self-signed certificate
  1. 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.
复制代码
解决方案:



  • 方案一:下载安装一个证书点击参考这里
  • 方案二:disable encryption with -No option点击参考这里
利用-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)
  1. /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "tangdoudou.123"
  2. -No
复制代码

现实案例:

  1. mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码"
  2. Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : SSL Provider: [error:0A000086:SSL routines::certificate verify failed:self-signed certificate].
  3. 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.
  4. mssql@9f9XXXXXX:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "xiaojin的密码" -No
  5. 1> SELECT name AS DatabaseName FROM sys.databases;
  6. 2> go
  7. DatabaseName
  8. --------------------------------------------------------------------------------------------------------------------------------
  9. master
  10. tempdb
  11. model
  12. msdb
  13. (4 rows affected)
  14. 1> SELECT name AS DatabaseName FROM sys.databases;
  15. 2> fo
  16. 3> go
  17. Msg 102, Level 15, State 1, Server d046613904c3, Line 2
  18. Incorrect syntax near 'fo'.
  19. 1> select @@version
  20. 2> go
  21.                                                                                                                                                                                                                
  22. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  23. Microsoft SQL Server 2022 (RTM-CU15) (KB5041321) - 16.0.4145.4 (X64)
  24.         Sep 19 2024 08:25:04
  25.         Copyright (C) 2022 Microsoft Corporation
  26.         Developer Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>
  27. (1 rows affected)
  28. 1>
复制代码
结语



  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 各人要天天开心哦
   欢迎各人指出文章需要改正之处~
学无止境,互助共赢
  

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表