β

[ 翻译 ] 在Mac OS X上使用docker装配开发环境的数据库服务

Colstuwjx的博客 70 阅读

如果你刚刚开始软件研发的职业生涯并且正在使用mac,然后对于怎么使用像MySQL/MariaDB, PostgreSQL, Microsoft SQL Server, Azure CosmosDB SQL又或者Oracle数据库这样的关系型数据库感兴趣的话,那么这篇文章正适合你!

迄今为止,曾经每当我在我的笔记本电脑上跑Linux时,我都是直接在我的环境里安装对应的数据库软件。有时候我会面临像依赖地狱(dependency hell),软件冲突,本地库缺失这样的问题,然后最终不得不选择将数据库跑在相对隔离的Virtualbox虚拟机里。在如今的容器化世界里,这已经是过去式了。

如果你真的想让自己的代码人生变得更加轻松,那么上手使用Docker,然后在容器里启动数据库吧。所有都可以。

在容器里运行RDBMS可能不太适用于生产环境,但是换成是开发环境/测试环境呢?这简直是完美搭档。

如果还没有做的话,请先确保已经安装了Homebrew和Cask —— 它们是Mac OS上的包管理器软件。这不仅仅适用于这篇文章,未来安装任何软件你都用得上。

前置条件

你必须得先装上Docker。而且虽说Kitematic是一个可选项,但是实际上我建议你最好装上它。一旦在系统里创建好了这些容器(start/stop/restart/delete),Kitematic会让你管理容器变得更加轻松。

brew cask install docker kitematic  

一旦装上了Docker,你最好确保在Docker Store里有一个账号 —— 可以 在这里注册 。对于某些数据库软件来说这一步是必需的。一旦有了自己的账号,可以在UI登陆也可以直接执行 docker login

数据库客户端的命令行

要连接一台数据库的话,你将需要一个客户端,而且最好是一款你能够通过命令行/终端快速上手使用的。对于下面每款数据库而言,你将可以找到两条指令:一条是通过Docker来安装和启动数据库,另外一条则是通过命令行安装和连接到该数据库。

绝大多数的数据库在其Docker镜像里只提供了命令行而没有装客户端,不过我发现安装这些客户端真的相当有用,这样一来你便可以轻松地连接到在其他任意地方运行的数据库,比如云端,或者在网络上的一些远程服务器。再者说,你也可以编写脚本来做一些自动化的工作。

这并不是说你不能在Docker里通过命令行做这些事情... 这纯粹只是我的个人偏好罢了。

开工

目前,所有四个主流的数据库软件均有提供各自的Docker镜像。 而且我正在密切参与Oracle数据库的Docker镜像的构建工作,和我的朋友 Gerald Venzl 一起尝试优雅地将它们组装到一起。 不过其他数据库也提供了非常有用而且组装好的Docker镜像,我相信你会赞美它们的。

那么,让我们开始吧。

MySQL

你应该能注意到,在Docker Hub上有两个MySQL镜像:

  1. 官方的Oracle MySQL服务器镜像
    https://hub.docker.com/r/mysql/mysql-server/

  2. 社区驱动的MySQL镜像
    https://hub.docker.com/_/mysql/

我通常倾向于使用一个产品的厂商官方提供的工具来消费该产品。当然你也完全可以去尝试[2],不过下面列出的指令是针对Oracle出品的MySQL服务器。

下载和启动MySQL容器:

$ docker run --name=mysql1 -d -p 3306:3306 -e MYSQL_USER=dev -e MYSQL_PASSWORD=dev123 -e MYSQL_DATABASE=dev mysql/mysql-server

注意这里用到了一些特殊的环境变量。可以查看此镜像对应的 文档 来了解更多信息以及其他选项,比如怎么用root连接。

安装MySQL shell然后连到数据库:

$ brew cask install mysql-shell
$ mysqlsh dev@localhost:3306

Microsoft SQL Server

微软近年来一直在做一些很酷的事情。 他们不仅将这款产品用于Linux,而且现在还为它提供了相当不错的Docker镜像。

下载并启动Microsoft SQL Server容器:

$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=SqlServer2017' -p 1433:1433 -d microsoft/mssql-server-linux:2017-latest

使用 sqlcmd 安装和连接 —— 了解更多详情请转到 这里

$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release 
$ brew install --no-sandbox mssql-tools

连接到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安装和连接:

$ brew install psqlodbc
$ psql -h localhost -U postgres

Azure CosmosDB

CosmosDB 是一项由微软Azure提供的有趣服务,它允许开发者使用不同的API连接到相同的数据存储。举个例子,你可以使用CosmosDB作为MongoDB或者Cassandra的一个替代品。它也提供一个SQL风格的API。你只要在CosmosDB上将一个之前已经开发好的现有应用指向这些数据库里面的其中一个,它便能正常工作(当然,要么给它指定一个,要么分配一个)。它还可以做到优雅地伸缩。 甚至于Thomson Reuters也在使用它

再次重申一下,就我个人而言,使用CosmosDB最简单的方式便是通过命令行。但是要试玩它的话,当然你首先得有一个Azure账号。除此之外还得掏出几百美刀用于头30天的使用,微软Azure也提供了许多免费服务(带有明确的限制/配额),如果你在头30天使用期间或之后激活了订阅服务的话,一些服务会在开始使用的头12个月内免费。

那么,现在马上转到 azure.microsoft.com/free 然后创建一个账号吧。

安装Azure命令行。 对于Mac OS X 来说,你只需要使用Homebrew安装即可:

$ brew install azure-cli

对于Linux用户,不妨 查看下文档 里包含的针对不同的包管理器和发行版对应的指令。

如果你真的想要试玩它的话,不妨跟着这个“ 使用命令行创建一个SQL API账号 ”的例子来做吧!

Oracle数据库

在我就职于Oracle的期间,我带领公司在Github上的建设工作,帮助团队结构化他们的项目,并推出一些新的开源类库,工具,资源,以及一些样本集。不过,从一开始我就关注了一个特殊的项目:docker-images仓库。而且我非常自豪能够针对某些关键的Oracle产品的开发者体验做出一些提升和改善,之所以能有这些成果都要感谢Docker以及来自于Monica Riccelli, Avi Miller Gerald Venzl 和其他许多工程师和产品经理的不懈努力。

在以前,出于开发目的安装和运行Oracle数据库一般是比较曲折费劲的,但是感谢Gerald和Docker的不懈努力,现在它已经变得足够简单了。

现在,任何人都可以访问docker-images仓库,下载Dockerfiles并且构建自己的镜像用于商业产品,事实上 Docker Store Oracle容器注册中心 上的常见产品都有一些预先构建好的镜像可用。

下面我简单列举了一下从Docker Store下载和运行Oracle数据库镜像所需的几个步骤。

在这一点上,我会假设你已经有一个Docker ID(帐户)。 如果还没有的话,不妨 创建一个

在你的终端里,登陆然后拉取Oracle DB镜像:

$ docker login
$ docker pull store/oracle/database-enterprise:12.2.0.1

耐心等会。由于它是功能(几乎)齐全的数据库,镜像接近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

作者:Colstuwjx的博客
分享IT技术,学习与探讨互联网运维

发表评论