Docker最全教程——数据库容器化(十一)

640?wx_fmt=png640?wx_fmt=png终于按时完成第二篇。本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化。本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容器化实践,中间再穿插一些知识点和实践细节。在编写的过程中,我一直处于一种矛盾的心理,是一笔带过呢?还是尽可能的将实践细节全部讲到位呢?最后,我选择了后者,虽然要花费更多的精力,但是既然开始了本次教程,就尽量写到位吧。640?wx_fmt=png


目录

640?wx_fmt=png





//数据库容器化//

什么是数据库?

数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。因此,所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

目前主流的数据库分为关系型数据库和非关系型数据库(NoSQL


关系型数据库和非关系型数据库对比

640?wx_fmt=png

主流的数据库

关系型数据库:

· Microsoft SQL ServerMicrosoft

· MySQL(开源)

· Oracle(甲骨文)

· MariaDB(MySQL的代替品)

· PostgreSQL(开源)

· DB2IBM


非关系型数据库:

· MongoDB(面向文档)

· CouchDB(面向文档,Apache基金会

· Redis(键值对数据库)

· MemcacheDB(键值对数据库)

· Hypertable

· Hadoop HBase


数据库容器化

随着Docker的流行,主流的数据库厂商均提供了相关的Docker镜像,因此我们能够非常方便的将数据库托管到容器之中,用于测试和开发环境(现阶段)

注意,现阶段我们不推荐在容器中托管正式环境的数据库,目前数据库容器化还存在一些问题、不适应性以及质疑,并且还缺乏成熟的案例和方案(已经有很多厂商在做这块的探索了,包括阿里、京东)。

数据库容器化绝不是一个伪命题,数据库容器化是值得我们来探索的一个方向,而且应是一种必然的趋势。在本篇中,我们不做过多探讨。

640?wx_fmt=jpeg 

接下来,笔者将逐步和大家分享如何将主流的数据库托管到容器之中。



//Sql Server容器化//


SQL Server是由Microsoft开发和推广的关系数据库,其在操作数据库管理系统 (ODBMS) 领域处于领先水平,目前已经提供SQL Server 2019预览版。其中,SQL Server 2017 跨出了重要的一步,它力求通过将 SQL Server 的强大功能引入 Linux、基于 Linux 的 Docker 容器和 Windows,使用户可以在 SQL Server 平台上选择开发语言、数据类型、本地开发或云端开发,以及操作系统开发。

因此,在本篇教程中,我们将使用SQL Server 2017来进行演示。

640?wx_fmt=jpeg



镜像说明

官方镜像分为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

值范围支持DeveloperExpressStandard EnterpriseEnterpriseCore、产品密钥 ,一般情况下,我们使用Developer即可,即开发版本,其包含企业版所有的功能,足够我们用于开发和测试。

其他:

640?wx_fmt=jpeg


//运行 SQL Server 容器镜像//


PowerShell运行

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 容器映像。


640?wx_fmt=jpeg 

注意:密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下,密码必须至少为 8 个字符长,且包含三个以下四种字符集的字符:大写字母、 小写字母、 十进制数字和符号。 你可以通过执行 docker logs 命令检查错误日志。


执行之后(镜像不存在会自动拉取,大家也可以使用拉取命令下拉取镜像,比如:docker pull mcr.microsoft.com/mssql/server:2017-latest),会默认创建一个使用 SQL Server 2017 开发人员版的容器,端口为1433,密码为123456abcD。

640?wx_fmt=jpeg 

镜像拉取完成之后成功启动:

640?wx_fmt=jpeg 

当然,大家也可以通过命令行查看:

docker ps -a

640?wx_fmt=jpeg 

如果“状态(STATUS)”列显示“UP”,则 SQL Server 将在容器中运行,并侦听“端口”列中指定的端口。


Bash Shell运行

如果是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

640?wx_fmt=jpeg 


//管理SQL Server//


使用SQL Server Management Studio来管理SQL Server

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 查询和数据库对象,如视图、 表和存储的过程


下载地址:

https://docs.microsoft.com/zh-cn/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017

安装完成之后,我们就可以启动SSMS来进行管理我们的数据库了。

640?wx_fmt=png 

设置

描述

服务器类型

默认为数据库引擎;请勿更改此值。

服务器名称

输入目标计算机的名称或IP 地址。

身份验证

对于 Linux 上的 SQL Server使用SQL Server 身份验证

登录

输入数据库服务器上具有访问权限的用户的名称 (例如,默认值SA安装过程中创建的帐户)

密码

指定的用户输入的密码 (对于SA帐户,则此安装过程中创建)


如图所示,我们输入上述内容,以及刚才我们通过环境变量设置的密码“123456abcD”,点击连接,可以看到如下图所示的界面:

640?wx_fmt=png 

我们可以通过界面来管理我们的数据库以及执行相关的查询:

640?wx_fmt=png 


使用sqlcmd管理数据库

我们可以在容器内部使用 SQL Server 命令行工具 sqlcmd 来连接和管理SQL Server。

1. 使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell

PowerShell

docker exec -it mySqlServer "bash"


640?wx_fmt=jpeg 

bash

sudo docker exec -it mySqlServer "bash"


2. 使用 sqlcmd 进行本地连接。 默认情况下,sqlcmd 不在路径之中,因此需要指定完整路径


命令:

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '123456abcD'


640?wx_fmt=jpeg 

成功的话,就会显示 sqlcmd 命令提示符 1> 


3. 执行SQL脚本。

比如,我们创建一个MyDb数据库,可以执行以下脚本:

CREATE DATABASE MyDB

SELECT Name from sys.Databases

GO


第一行为创库脚本,第二行执行查询,查询服务器上所有数据库的名称,第三行为执行。


注意:只有输入GO才会立即执行之前的命令。


640?wx_fmt=jpeg 

执行结果如上图所示。我们通过SSMS可以查看到我们刚才创建的数据库:

640?wx_fmt=png 

除了以上方式,我们也可以在容器外使用sqlcmd连接数据库:

sqlcmd -S localhost,1433 -U SA -P "123456abcD"

640?wx_fmt=jpeg 

注意:退出SQLCMD命令为:QUIT


其他管理工具

除了以上的连接管理工具,大家还可以使用以下工具进行连接:

· Visual Studio Code

640?wx_fmt=jpeg 

· Azure Data Studio(跨平台数据库工具,适用于在Windows,MacOS和Linux上使用Microsoft系列内部部署和云数据平台的数据专业人员

640?wx_fmt=jpeg 

· mssql-cliSQL Server的新的交互式命令行查询工具,支持跨平台,开源,提供智能提示和语法高亮等)

https://cloudblogs.microsoft.com/sqlserver/2017/12/12/try-mssql-cli-a-new-interactive-command-line-tool-for-sql-server/


640?wx_fmt=png


Docker最全教程——从理论到实战(一)

Docker最全教程——从理论到实战(二)

Docker最全教程——从理论到实战(三)

Docker最全教程——从理论到实战(四)

Docker最全教程——从理论到实战(五)

Docker最全教程——从理论到实战(六)

Docker最全教程——从理论到实战(七)

Docker最全教程——从理论到实战(八)    

Docker最全教程——从理论到实战(九)

Docker最全教程之使用Tencent&nbsp;Hub来完成CI(十)



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

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

相关文章

CF1416E-Split【dp,set】

正题 题目链接:https://www.luogu.com.cn/problem/CF1416E 题目大意 给出nnn个正整数的一个序列aia_iai​&#xff0c;你要把aia_iai​拆成两个正整数的和b2i,b2i1b_{2i},b_{2i1}b2i​,b2i1​&#xff0c;要求使得bbb的相同连续段最少。 1≤n≤5105,1≤ai≤1091\leq n\leq 5\…

[选拔赛2 NOIP2018雅礼集训 Day3 u,v,w]玩个三角形(二维差分),玩个球(状压DP+map),玩个树(树上DP)

文章目录T1&#xff1a;玩个三角形titlesolutioncodeT2&#xff1a;玩个球titlesolutioncodeT3&#xff1a;玩个树titlesolutioncodeT1&#xff1a;玩个三角形 title 题目描述 考虑一个 n ∗ n 的矩阵 A&#xff0c;初始所有元素均为 0。 执行 q 次如下形式的操作&#xff…

LOJ:蚂蚁之旅(欧拉回路)

题意描述 给你无向图的NNN个点和MMM条边&#xff0c;保证这 条边都不同且不会存在同一点的自环边&#xff0c;现在问你至少要几笔才能所有边都画一遍。&#xff08;一笔画的时候笔不离开纸&#xff09; 解析 无向图中&#xff0c;若一个图是连通的&#xff0c;且奇数度个数的…

比赛记录

CF1039 2022.10.31 B 随机化概率分析&#xff0c;发现 \(\left(\dfrac{1}{40}\right)^{4000}\) 等于 \(0\)&#xff0c;所以会蒙对一次。C 比较容易分析&#xff0c;发现若 \(c_u\oplus x\notc_v\)&#xff0c;则对这条边没有任何影响&#xff1b;若 \(c_u\oplus xc_v\)&#x…

2019 年起如何开始学习 ABP 框架系列文章-开篇有益

阅读文本大概需要 3.3 分钟。本系列文章推荐阅读地址为&#xff1a;52ABP 开发文档https://www.52abp.com/Wiki/52abp/latest/Welcome-to-52abp本文的目的是为了让刚刚接触 ABP 框架的同学或者准备接触 ABP 框架的同学&#xff0c;能够理解和搞明白 ABP 框架到底是怎么回事&…

【模板】差分约束算法

【模板】差分约束算法 题意&#xff1a; 题解&#xff1a; 模板题 算法讲解 给出一组包含 m 个不等式&#xff0c;有 n 个未知数。求任意一组满足这个不等式组的解&#xff0c;或判定无解。 连边之后跑最短路&#xff0c;保证每个连通块都没有负环即可。 也可以建源点s 0&a…

数论一之定理证明——裴蜀/威尔逊/费马/扩展欧几里得/[扩展]欧拉/[扩展]中国剩余定理,欧拉函数,逆元,剩余系,筛法

打死没想到会在H老师处学懂数论同余&#xff0c;整除模运算埃式筛法欧拉筛法最大公约数和最小公倍数辗转相除法更相减损术裴蜀定理威尔逊定理费马定理同余等价类、剩余系、缩系欧拉函数欧拉定理扩展欧拉定理区间逆元扩展欧几里得中国剩余定理扩展中国剩余定理利用以上所有知识进…

LOJ:相框(欧拉回路、分类讨论)

解析 本题是一道if的板子题 抓住关键&#xff1a;使所有点的度数全变为2 首先对于度数大于2的点&#xff0c;把它分为若干2度点&#xff08;和可能的一个单点&#xff09; 现在我们只剩下单点和二度点了 接下来分来讨论一下 若有多个连通块&#xff0c;我们要把它们变成链再拼…

CF1342F Make It Ascending(状压+求过程-求结果)

CF1342F Make It Ascending 给予一个包含 \(n\) 个元素的数组 \(a\)&#xff0c;你可以进行以下操作&#xff1a; 选择两个不同的元素 \(a_i,a_j\)(\(1 \le i,j \le n\)&#xff0c;\(i \ne j\))将 \(a_j\) 的值加上 \(a_i\)&#xff0c;并移除 \(a\) 中的第 \(i\) 个元素。 求…

AT4437-[AGC028C]Min Cost Cycle【结论,堆】

正题 题目链接:https://www.luogu.com.cn/problem/AT4437 题目大意 有nnn个点的一张有向完全图&#xff0c;每个点有两个点权a,ba,ba,b。连接x,yx,yx,y两个点的边权为min{ax,by}min\{a_x,b_y\}min{ax​,by​}&#xff0c;求一条权值和最小的哈密顿回路。 1≤n≤105,1≤a,b≤1…

某银行大型管理系统端到端持续集成和交付实践

背景传统的银行IT系统研发流程从需求提出到产品交付往往具有较长的研发周期&#xff0c;纵观银行当下面临的市场环境&#xff0c;个人信贷消费升级&#xff0c;资管需求旺盛&#xff0c;普惠金融成为国家战略&#xff0c;来自银行同业和互联网金融的压力扑面而来&#xff0c;谁…

排列组合十一个性质公式及证明,错排数公式及证明

文章目录排列数组合数求组合数常用公式定义式递推式杨辉三角组合数常用性质及证明性质一性质二性质三性质四(二项式定理)性质五性质六性质七性质八性质九性质十性质十一错排数排列数 从nnn个物品中不放回地依次选mmm个物品&#xff0c;考虑顺序&#xff0c;有多少种方案&#…

洛谷P3155:叶子的染色(树形dp)

解析 本题的关键是选取哪一个根对答案没有影响 还有一个重要的性质是&#xff1a;根节点必定涂色 这点对每棵子树作为独立的子问题时依然成立 然鹅我完全没有看到上面那俩性质 直接暴力设计dp状态0.、1、2 开始莽 然后&#xff1f;然后就T了啊… 只好开始考虑换根 然后&#x…

P7011-[CERC2013]Escape【堆,启发式合并】

正题 题目链接:https://www.luogu.com.cn/problem/P7011 题目大意 给出nnn个点的一棵树&#xff0c;从一出发&#xff0c;要走到 ttt。初始时权值为000&#xff0c;每个节点有一个权值wiw_iwi​&#xff0c;第一次走过这个节点时会让权值加上该节点的权值&#xff0c;要求全程…

CF1463F Max Correct Set(取小样法+状压 DP)

CF1463F Max Correct Set 要求选出集合 \(U\{1,2,3,\dots,n\}\) 的一个子集 \(S\)&#xff0c;满足&#xff1a;如果 \(a \in S\) 并且 \(b \in S\)&#xff0c;那么 \(|a-b| \not {x}\) 并且 \(|a-b| \not {y}\)。求集合 \(S\) 大小的最大值。 \(1\le n\le 10^9,1\le x,y\le 2…

引入用于 Azure IoT Edge 的 Visual Studio 工具

物联网开发人员&#xff1a;工具和经验引入用于 Azure IoT Edge 的 Visual Studio 工具今天&#xff0c;我们很高兴地发布用于 Visual Studio 2017 的 Azure IoT Edge 工具的预览版。Azure IoT Edge 是一个全托管服务&#xff0c;通过直接在跨平台物联网设备上部署并运行人工智…

P4878 [USACO05DEC]Layout G

P4878 [USACO05DEC]Layout G 题意&#xff1a; 题解&#xff1a; 这个题其实是差分约束的裸题&#xff0c;但是有几个坑要注意 1.题目说了&#xff0c;奶牛按照编号1…N排列&#xff0c;对于ML个输入&#xff0c;A< B ,所以关系是B - A < 10,而不是A - B <10,我一开…

【学习笔记】原根 / BSGS / 扩展BSGS证明及模板

文章目录原根BSGS大步小步算法扩展BSGS原根 如果两个整数a,ba,ba,b互质&#xff0c;则有aϕ(b)%b1a^{\phi(b)}\%b1aϕ(b)%b1 定义模bbb意义下的aaa的阶为使ad%b1a^d\%b1ad%b1的最小正整数ddd 显然&#xff0c;模bbb的阶d∣ϕ(b)d|\phi(b)d∣ϕ(b) 如果模bbb意义下aaa的阶为…

Loj#3130-「COCI 2018.12」Praktični【线性基】

正题 题目链接:https://loj.ac/p/3130 题目大意 给出nnn个点mmm条边的一张有权无向图&#xff0c;你每次可以选择一个边集异或上一个值&#xff0c;要求最少次数使得所有简单环异或和都为000。 1≤n,m≤1051\leq n,m\leq 10^51≤n,m≤105 解题思路 先找一棵生成树&#xff0…

洛谷P5664:Emiya 家今天的饭(容斥、dp)

解析 应该是比较入门的容斥了 统计方案用总方案数-某列超过1半的方案数 dp设计的一个trick是只统计差值 代码 #include<bits/stdc.h> using namespace std; #define ll long long const int N2050; const double eps1e-6; const int mod998244353; inline ll read(){l…