终于按时完成第二篇。本来准备着手讲一些实践,但是数据库部分没有讲到,部分实践会存在一些问题,于是就有了此篇以及后续——数据库容器化。本篇将从SQL Server容器化实践开始,并逐步讲解其他数据库的容器化实践,中间再穿插一些知识点和实践细节。在编写的过程中,我一直处于一种矛盾的心理,是一笔带过呢?还是尽可能的将实践细节全部讲到位呢?最后,我选择了后者,虽然要花费更多的精力,但是既然开始了本次教程,就尽量写到位吧。
目录
数据库容器化 什么是数据库?
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。因此,所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
目前主流的数据库分为关系型数据库和非关系型数据库(NoSQL)。
关系型数据库和非关系型数据库对比 主流的数据库 关系型数据库:
· Microsoft SQL Server(Microsoft)
· MySQL(开源)
· Oracle(甲骨文)
· MariaDB(MySQL的代替品)
· PostgreSQL(开源)
· DB2(IBM)
非关系型数据库:
· MongoDB(面向文档)
· CouchDB(面向文档,Apache基金会)
· Redis(键值对数据库)
· MemcacheDB(键值对数据库)
· Hypertable
· Hadoop HBase
数据库容器化
随着Docker的流行,主流的数据库厂商均提供了相关的Docker镜像,因此我们能够非常方便的将数据库托管到容器之中,用于测试和开发环境(现阶段)。
注意,现阶段我们不推荐在容器中托管正式环境的数据库,目前数据库容器化还存在一些问题、不适应性以及质疑,并且还缺乏成熟的案例和方案(已经有很多厂商在做这块的探索了,包括阿里、京东)。
数据库容器化绝不是一个伪命题,数据库容器化是值得我们来探索的一个方向,而且应是一种必然的趋势。在本篇中,我们不做过多探讨。
接下来,笔者将逐步和大家分享如何将主流的数据库托管到容器之中。
Sql Server容器化
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即可,即开发版本,其包含企业版所有的功能,足够我们用于开发和测试。
其他: