如果你刚刚开始软件研发的职业生涯并且正在使用Mac,然后对于怎么使用像MySQL/MariaDB、PostgreSQL、Microsoft SQL Server、Azure CosmosDB SQL又或者Oracle数据库这样的关系型数据库感兴趣的话,那么这篇文章正适合你!
迄今为止,曾经每当我在我的笔记本电脑上跑Linux时,我都是直接在我的环境里安装对应的数据库软件。有时候我会面临像依赖地狱(dependency hell),软件冲突,本地库缺失这样的问题,然后最终不得不选择将数据库跑在相对隔离的Virtualbox虚拟机里。在如今的容器化世界里,这已经是过去式了。
如果你真的想让自己的代码人生变得更加轻松,那么上手使用Docker,然后在容器里启动数据库吧。所有都可以。
在容器里运行RDBMS可能不太适用于生产环境,但是换成是开发环境/测试环境呢?这简直是完美搭档。
如果还没有做的话,请先确保已经安装了Homebrew和Cask —— 它们是Mac OS上的包管理器软件。这不仅仅适用于这篇文章,未来安装任何软件你都用得上。
前置条件
brew cask install docker kitematic
一旦装上了Docker,你最好确保在Docker Store里有一个账号 —— 可以在这里注册[1]。对于某些数据库软件来说这一步是必需的。一旦有了自己的账号,可以在UI登陆也可以直接执行docker login。
数据库客户端的命令行
绝大多数的数据库在其Docker镜像里只提供了命令行而没有装客户端,不过我发现安装这些客户端真的相当有用,这样一来你便可以轻松地连接到在其他任意地方运行的数据库,比如云端,或者在网络上的一些远程服务器。再者说,你也可以编写脚本来做一些自动化的工作。
这并不是说你不能在Docker里通过命令行做这些事情……这纯粹只是我的个人偏好罢了。
开工
那么,让我们开始吧。
MySQL
你应该能注意到,在Docker Hub上有两个MySQL镜像:
官方的Oracle MySQL服务器镜像:https://hub.docker.com/r/mysql/mysql-server/
社区驱动的MySQL镜像:https://hub.docker.com/_/mysql/
我通常倾向于使用一个产品的厂商官方提供的工具来消费该产品。当然你也完全可以去尝试2,不过下面列出的指令是针对Oracle出品的MySQL服务器。
下载和启动MySQL容器:
注意这里用到了一些特殊的环境变量。可以查看此镜像对应的文档[2]来了解更多信息以及其他选项,比如怎么用root连接。安装MySQL shell然后连到数据库
Microsoft SQL Server
微软近年来一直在做一些很酷的事情。 他们不仅将这款产品用于Linux,而且现在还为它提供了相当不错的Docker镜像。
下载并启动Microsoft SQL Server容器:
使用sqlcmd[3]安装和连接 —— 了解更多详情请转到这里[4]。
连接到SQL Server:
$ sqlcmd -S localhost,1433 -U SA -P SqlServer2017
PostgreSQL
此镜像是由PostgreSQL Docker社区提供和支持的。基本上是Docker的员工以及参与PostgreSQL开发的小伙伴。我发现这个镜像也非常的简单易用。
下载和运行PostgreSQL:
$ docker run --name mypostgresdb -e POSTGRES_PASSWORD=psql123 -p 5432:5432 -d postgres
使用PSQL安装和连接:
Azure CosmosDB
CosmosDB[5]是一项由微软Azure提供的有趣服务,它允许开发者使用不同的API连接到相同的数据存储。举个例子,你可以使用CosmosDB作为MongoDB或者Cassandra的一个替代品。它也提供一个SQL风格的API。你只要在CosmosDB上将一个之前已经开发好的现有应用指向这些数据库里面的其中一个,它便能正常工作(当然,要么给它指定一个,要么分配一个)。它还可以做到优雅地伸缩。甚至于Thomson Reuters也在使用它[6]。
再次重申一下,就我个人而言,使用CosmosDB最简单的方式便是通过命令行。但是要试玩它的话,当然你首先得��ʹ,��ʹ有一个Azure账号。除此之外还得掏出几百美刀用于头30天的使用,微软Azure也提供了许多免费服务(带有明确的限制/配额),如果你在头30天使用期间或之后激活了订阅服务的话,一些服务会在开始使用的头12个月内免费。
那么,现在马上转到azure.microsoft.com/free然后创建一个账号吧。
安装Azure命令行。对于Mac OS X[7]来说,你只需要使用Homebrew安装即可:
$ brew install azure-cli
对于Linux用户,不妨查看下文档[8]里包含的针对不同的包管理器和发行版对应的指令。
如果你真的想要试玩它的话,不妨跟着这个“使用命令行创建一个SQL API账号[9]”的例子来做吧!
Oracle数据库
在我就职于Oracle的期间,我带领公司在GitHub上的建设工作,帮助团队结构化他们的项目,并推出一些新的开源类库,工具,资源,以及一些样本集。不过,从一开始我就关注了一个特殊的项目:docker-images仓库。而且我非常自豪能够针对某些关键的Oracle产品的开发者体验做出一些提升和改善,之所以能有这些成果都要感谢Docker以及来自于Monica Riccelli,Avi Miller,Gerald Venzl和其他许多工程师和产品经理的不懈努力。
在以前,出于开发目的安装和运行Oracle数据库一般是比较曲折费劲的,但是感谢Gerald和Docker的不懈努力,现在它已经变得足够简单了。
现在,任何人都可以访问docker-images仓库,下载Dockerfiles并且构建自己的镜像用于商业产品,事实上Docker Store[10]和Oracle容器注册中心[11]上的常见产品都有一些预先构建好的镜像可用。
下面我简单列举了一下从Docker Store下载和运行Oracle数据库镜像所需的几个步骤。
在这一点上,我会假设你已经有一个Docker ID(帐户)。 如果还没有的话,不妨创建一个。
去到Docker Store上的Oracle数据库镜像页面
点击 Proceed to Checkout(右边的蓝色按钮)
登陆你的Docker ID
填写表格,点选"我同意…",然后转到Get Content
现在你应该可以访问镜像的文档页面,并且可以看到docker pull的相关指令
如今你可以回到终端,继续这篇文章往下读。
在你的终端里,登陆然后拉取Oracle DB镜像:
耐心等会。由于它是功能(几乎)齐全的数据库,镜像接近3GB。这挺不错的。
以Docker容器的方式运行Oracle数据库:
$ docker run -d -it — name oracledb -p 1521:1521 store/oracle/database-enterprise:12.2.0.1
这可能需要一点时间,不过最终它会跑起来的。通过docker logs可以检查进度。
在过去,你可能会使用SQL*PLus连接到Oracle数据库。可是现在已经是21世纪,你也许会想要尝试下SQLcl。这个新工具在终端上的交互性要比以前的SQL*Plus强很多。 所以我强烈建议你试用一下。 此外,它是由Oracle的朋友设计的,即krisrice和Jeff Smith。
要安装SQLcl并连接到创建的相关镜像里的话,可以按照下面这样做:
从Oracle下载ZIP文件
在终端里解压然后去到sqlcl/bin目录(如果你想的话,不妨链接一个到/usr/local/bin)
$ ./sql sys/Oradoc_db1@//localhost/ORCLPDB1.localdomain as sysdba
小结
相关链接:
https://store.docker.com/signup
https://hub.docker.com/r/mysql/mysql-server/
https://docs.microsoft.com/en-us/sql/tools/sqlcmd-utility
https://docs.microsoft.com/en-ca/sql/linux/sql-server-linux-setup-tools#macos
https://azure.microsoft.com/services/cosmos-db/
https://customers.microsoft.com/en-us/story/thomson-reuters-media-telco-azure
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-macos?view=azure-cli-latest
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli?view=azure-cli-latest
https://docs.microsoft.com/en-us/azure/cosmos-db/scripts/create-database-account-collections-cli
https://store.docker.com/search?q=oracle&source=verified&type=image
https://container-registry.oracle.com/