终于按时完成第二篇。原本准备着手讲一些实践,可是数据库部分没有讲到,部分实践会存在一些问题,因而就有了此篇以及后续——数据库容器化。本篇将从SQL Server容器化实践开始,并逐步讲解其余数据库的容器化实践,中间再穿插一些知识点和实践细节。在编写的过程当中,我一直处于一种矛盾的心理,是一笔带过呢?仍是尽量的将实践细节所有讲到位呢?最后,我选择了后者,虽然要花费更多的精力,可是既然开始了本次教程,就尽可能写到位吧。sql
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户能够对文件中的数据运行新增、截取、更新、删除等操做。所以,所谓“数据库”是以必定方式储存在一块儿、能与多个用户共享、具备尽量小的冗余度、与应用程序彼此独立的数据集合。docker
目前主流的数据库分为关系型数据库和非关系型数据库(NoSQL)。数据库
· Microsoft SQL Server(Microsoft)bash
· MySQL(开源)服务器
· Oracle(甲骨文)编辑器
· MariaDB(MySQL的代替品)工具
· PostgreSQL(开源)oop
· DB2(IBM)sqlserver
· MongoDB(面向文档)测试
· CouchDB(面向文档,Apache基金会)
· Redis(键值对数据库)
· MemcacheDB(键值对数据库)
· Hypertable
· Hadoop HBase
随着Docker的流行,主流的数据库厂商均提供了相关的Docker镜像,所以咱们可以很是方便的将数据库托管到容器之中,用于测试和开发环境(现阶段)。
注意,现阶段咱们不推荐在容器中托管正式环境的数据库,目前数据库容器化还存在一些问题、不适应性以及质疑,而且还缺少成熟的案例和方案(已经有不少厂商在作这块的探索了,包括阿里、京东)。
数据库容器化毫不是一个伪命题,数据库容器化是值得咱们来探索的一个方向,并且应是一种必然的趋势。在本篇中,咱们不作过多探讨。
接下来,笔者将逐步和你们分享如何将主流的数据库托管到容器之中。
SQL Server是由Microsoft开发和推广的关系数据库,其在操做数据库管理系统 (ODBMS) 领域处于领先水平,目前已经提供SQL Server 2019预览版。其中,SQL Server 2017 跨出了重要的一步,它力求经过将 SQL Server 的强大功能引入 Linux、基于 Linux 的 Docker 容器和 Windows,使用户能够在 SQL Server 平台上选择开发语言、数据类型、本地开发或云端开发,以及操做系统开发。
所以,在本篇教程中,咱们将使用SQL Server 2017来进行演示。
官方镜像分为Windows版本和Linux版本,官方镜像说明页为:
https://hub.docker.com/r/microsoft/mssql-server
这里咱们主要介绍Linux版本的镜像。
· Docker Engine 1.8+。
· Docker overlay2存储驱动程序。
· 至少2 GB的磁盘空间。
· 至少2 GB 的 RAM。若是您在Docker for Mac或Windows上运行,请确保为Docker VM分配足够的内存。
· Linux 上的 SQL Server 的系统要求。
必填项:
· ACCEPT_EULA = Y(表示接受最终用户许可协议,不然没法启动)
· SA_PASSWORD = <强密码> (密码必须符合复杂密码要求,包含大小写字母以及数字或特殊符号,长度不能少于8个字符,不然没法启动)
注意项:
· MSSQL_PID = <your_product_id | edition_name>(用于设置产品ID(PID)或版本,默认值:Developer)
值范围支持Developer、Express、Standard 、Enterprise、EnterpriseCore、产品密钥 ,通常状况下,咱们使用Developer便可,即开发版本,其包含企业版全部的功能,足够咱们用于开发和测试。
其余:
在Windows系统之上,咱们可使用PowerShell来运行SQL Server镜像。脚本以下所示:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=123456abcD" `
-p 1433:1433 --name mySqlServer `
-d mcr.microsoft.com/mssql/server:2017-latest
相关参数说明以下所示:
参数 |
描述 |
-e “ACCEPT_EULA=Y” |
将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。 SQL Server 映像的必需设置。 |
-e “SA_PASSWORD =123456abcD” |
指定至少包含 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 容器映像。 |
注意:密码应符合 SQL Server 默认密码策略,不然容器没法设置 SQL Server,将中止工做。 默认状况下,密码必须至少为 8 个字符长,且包含三个如下四种字符集的字符:大写字母、 小写字母、 十进制数字和符号。 你能够经过执行 docker logs 命令检查错误日志。
执行以后(镜像不存在会自动拉取,你们也可使用拉取命令下拉取镜像,好比:docker pull mcr.microsoft.com/mssql/server:2017-latest),会默认建立一个使用 SQL Server 2017 开发人员版的容器,端口为1433,密码为123456abcD。
固然,你们也能够经过命令行查看:
docker ps -a
若是“状态(STATUS)”列显示“UP”,则 SQL Server 将在容器中运行,并侦听“端口”列中指定的端口。
若是是Linux系统,咱们能够经过Bash Shell执行如下命令:
sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=123456abcD' \
-p 1433:1433 --name mySqlServer \
-d mcr.microsoft.com/mssql/server:2017-latest
SQL Server Management Studio (SSMS)是 Microsoft 免费提供为开发和管理需求的 SQL 工具套件的一部分。 SSMS 是一个集成的环境,若要访问、 配置、 管理、 管理和开发 SQL Server 的全部组件。 它能够链接到任何平台上运行这两个在本地,在 Docker 容器中和云中的 SQL Server。 它还链接到 Azure SQL 数据库和 Azure SQL 数据仓库。 SSMS 将大量图形工具与丰富的脚本编辑器相结合,各类技术水平的开发人员和管理员都能访问 SQL Server。
SSMS 提供适用于 SQL Server 的大量开发和管理功能,包括执行如下任务的工具:
· 配置、 监视和管理单个或多个 SQL Server 实例
· 部署、 监视和升级数据层组件,如数据库和数据仓库
· 备份和还原数据库
· 生成和执行 T-SQL 查询和脚本,并查看结果
· 生成数据库对象的 T-SQL 脚本
· 查看和编辑数据库中的数据
· 以可视方式设计 T-SQL 查询和数据库对象,如视图、 表和存储的过程
下载地址:
安装完成以后,咱们就能够启动SSMS来进行管理咱们的数据库了。
设置 |
描述 |
服务器类型 |
默认为数据库引擎;请勿更改此值。 |
服务器名称 |
输入目标计算机的名称或IP 地址。 |
身份验证 |
对于 Linux 上的 SQL Server,请使用SQL Server 身份验证。 |
登陆 |
输入数据库服务器上具备访问权限的用户的名称 (例如,默认值SA安装过程当中建立的账户)。 |
密码 |
指定的用户输入的密码 (对于SA账户,则此安装过程当中建立)。 |
如图所示,咱们输入上述内容,以及刚才咱们经过环境变量设置的密码“123456abcD”,点击链接,能够看到以下图所示的界面:
咱们能够经过界面来管理咱们的数据库以及执行相关的查询:
咱们能够在容器内部使用 SQL Server 命令行工具 sqlcmd 来链接和管理SQL Server。
1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell
PowerShell:
docker exec -it mySqlServer "bash"
bash:
sudo docker exec -it mySqlServer "bash"
2. 使用 sqlcmd 进行本地链接。 默认状况下,sqlcmd 不在路径之中,所以须要指定完整路径。
命令:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '123456abcD'
成功的话,就会显示 sqlcmd 命令提示符 1> 。
3. 执行SQL脚本。
好比,咱们建立一个MyDb数据库,能够执行如下脚本:
CREATE DATABASE MyDB
SELECT Name from sys.Databases
GO
第一行为创库脚本,第二行执行查询,查询服务器上全部数据库的名称,第三行为执行。
注意:只有输入GO才会当即执行以前的命令。
执行结果如上图所示。咱们经过SSMS能够查看到咱们刚才建立的数据库:
除了以上方式,咱们也能够在容器外使用sqlcmd链接数据库:
sqlcmd -S localhost,1433 -U SA -P "123456abcD"
注意:退出SQLCMD命令为:QUIT。
除了以上的链接管理工具,你们还可使用如下工具进行链接:
· Visual Studio Code
· Azure Data Studio(跨平台数据库工具,适用于在Windows,MacOS和Linux上使用Microsoft系列内部部署和云数据平台的数据专业人员)
· mssql-cli(SQL Server的新的交互式命令行查询工具,支持跨平台,开源,提供智能提示和语法高亮等)