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

news/2024/12/21 23:52:00/文章来源:https://www.cnblogs.com/sugartang/p/18440353

前提条件

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

搜索镜像

docker search mssql-server

拉取镜像

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

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

运行容器,创建数据库

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

方案一:使用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

数据持久化

  • 如果需要实现即使在容器停止后文件也能持久保存,可以在上面命令后添加 -v sqlvolume:/var/opt/mssql,其中sqlvolume就是宿主机的一个文件挂载名称,冒号后边的是容器内的目录,这样写得话数据将会被存储在宿主机保留,避免数据丢失。

  • docker run命令时,您可以使用-v标志指定要使用的卷。这称为卷挂载。如果该卷不存在,docker 会为您创建一个(将在/var/lib/docker/volumes目录中创建一个卷)。现在,即使容器被销毁,数据也会保留在卷中

  • 如果想要详细了解数据挂载详情资料,可以参考我的另一篇文章讲解Docker系列-超详细讲解docker的5种数据持久化,volume,bind mounts,NFS等
    例如:

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-latest SQL 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服务


version: '3.3'
services:sqlserver:image: mcr.microsoft.com/mssql/server:2022-latestcontainer_name: mssql-serverrestart: alwaysenvironment:- ACCEPT_EULA=Y- SA_PASSWORD=tangdoudou.123- MSSQL_SA_PASSWORD=tangdoudou.123ports:- 5433:1433volumes:- ./sqlserver:/var/opt/mssql
安装执行
sudo docker compose up
安装成功

执行结果:

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/1✔ Container mssql-server  Started                                                                                                                                                                        0.4s
USER_01@xiaojinServer:/docker-compose$

查看容器列表

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 错误日志:

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

连接数据库

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

下载DBever,连接数据库

方案一实际案例:

连接案例:

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

一般情况下,我们会使用可视化工具去连接数据库,如果你需要命令行方式连接的话,可以参考这个文档:在容器内部使用 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:04Copyright (C) 2022 Microsoft CorporationDeveloper 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.

解决方案:

  • 方案一:下载安装一个证书点击参考这里
  • 方案二: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)

/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:04Copyright (C) 2022 Microsoft CorporationDeveloper Edition (64-bit) on Linux (Ubuntu 22.04.5 LTS) <X64>(1 rows affected)
1>

结语

  • 今天就写到这里啦~
  • 小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/808173.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git报错集

报错集 1.打标签报错 前戏:在开发了基础的项目功能后,在推送到远端仓库后,打算给提交的版本打标签,报错了 $ git push origin --tags fatal: unable to access https://github.com/ICP-team/仓库名.git/: Failed to connect to github.com port 443 after 21072 ms: Could…

财务知识-20个常用的会计分录

财务知识——20个常用的会计分录

工具推荐:搜索和删除Windows上重复文件的神器:AllDup

​ AllDup是一款免费的重复文件查找工具,它能够帮助用户快速识别和管理计算机上的重复文件。这些文件可能包括文本、图片、音乐、视频等多种类型。AllDup使用快速查询算法,可以有效地搜索和定位重复项,从而帮助用户释放硬盘空间,组织文件结构,并提高系统性能。 下载地址:h…

工具推荐:完全免费的电脑 Epub 阅读器软件 Jane Reader

​ Jane Reader是一款现代化的电子书阅读器,支持EPUB格式,旨在提供类似于纸质书籍的阅读体验。它具有简洁、清爽的界面,支持自动多栏、多主题、直排模式等功能,并提供了一系列个性化设置,如自定义边距、行高、字体大小等。Jane Reader还内置了常用字体,如宋体、黑体、仿宋…

工具推荐:开源免费的文件备份恢复工具:Kopia

​ Kopia是一个开源的备份和恢复工具,适用于Windows、macOS和Linux操作系统。它提供了命令行界面(CLI)和图形用户界面(GUI),支持增量备份、客户端端到端加密、数据压缩和重复数据删除等功能。Kopia的设计注重安全性和效率,支持多种存储后端,如本地磁盘、网络文件系统或…

工具推荐:最佳快捷键启动、控制软件:HotkeyP

​HotkeyP是一款功能强大的热键管理软件,它允许用户自定义键盘快捷键来执行各种操作,如打开文件、运行程序、控制系统命令等。软件提供了高度的个性化定制,用户可以根据自己的工作流程和习惯来设置快捷键,从而提高工作效率。此外,HotkeyP还支持宏命令,用户可以通过宏来自…

博客网站搭建

关于我的博客网站搭建过程自定义博客网站搭建教程 搭建效果 浏览网址:https://www.cnblogs.com/Love-XiaoMeng前期准备博客园:你需要在此注册一个账号,同时你需要在博客园右上角开通我的博客然后你需要在博客后台管理网站中完成好相应设置如图,同时你需要注意一定要开启JS权…

FM的正交解调法

1.FM的模拟调制过程 ​ FM信号是一种频率调制信号,其携带的信息保存在其信号的频率中,通过改变载波的频率来实现基带数据的传输。 其函数表达式如下: \[s(t) = A*cos(w_c*t + K_f*\int m(\tau) d\tau) \]其中: A:表示载波幅度。 \(m(\tau)\):表示基带信号。 \(w_c\):表示载…

工具推荐:支持工作流的高颜值 Windows 搜索启动器:Fluent Search

Fluent Search是一款专为Windows 10和Windows 11设计的高效搜索工具,它能够快速查找运行中的应用程序、浏览器标签、书签、文件等,帮助用户无缝切换工作流程。该软件采用了微软提倡的Fluent Design,具有半透明磨砂质感、圆角图形设计、简洁明快的图标和配色,提供了类似于Wi…

工具推荐:免费好用的WebP格式转换工具:AnyWebP

AnyWebP是一个多功能的WebP格式转换工具,它既提供在线服务也有适用于Windows和macOS的离线客户端。该工具能够将WebP图片转换为JPEG、PNG、ICO等常见格式,同时也支持将这些格式的图片转换为WebP格式。AnyWebP特别适合需要在不同平台和设备之间传输图片的用户,尤其是那些需要…

WPS股票价格查询EXCEL表格

第一步在表格内使用公式=GetStockSource(Stock_code)查询股票的即时交易信息,Stock_code表示股票代码;第二步通过公式从Source中提取所需要的数据,可以提取股票名称、价格、涨跌幅、收盘价格、成交额、成交量、换手率等。 公式如下: GetStockSource(Stock_code),查询股票即…