编者的话容器是怎样简化本地开发环境的数据库部署, 让我们一起来看看本文作者的分享
如果你刚刚开始软件研发的职业生涯并且正在使用 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 镜像:
官方的 Oracle MySQL 服务器镜像
https://hub.docker.com/r/mysql/mysql-server/
社区驱动的 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(帐户) 如果还没有的话, 不妨 创建一个
去到 Docker Store 上的 Oracle 数据库镜像 页面
点击 Proceed to Checkout(右边的蓝色按钮)
登陆你的 Docker ID
填写表格, 点选 "我同意...", 然后转到 Get Content
现在你应该可以访问镜像的文档页面, 并且可以看到 docker pull 的相关指令
如今你可以回到终端, 继续这篇文章往下读
在你的终端里, 登陆然后拉取 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 和 Jeff Smith
要安装 SQLcl 并连接到创建的相关镜像里的话, 可以按照下面这样做:
从 Oracle 下载 ZIP 文件
在终端里解压然后去到 sqlcl/bin 目录(如果你想的话, 不妨链接一个到 / usr/local/bin)
连到数据库:
$ ./sql sys/Oradoc_db1@//localhost/ORCLPDB1.localdomain as sysdba
小结
我希望这篇文章能够帮助你轻松无碍地上手使用关系型数据库 因为不管你使用什么编程语言, 都必须存储数据:-)
来源: http://www.tuicool.com/articles/yENvqqE