本文涉及一种在容器中连接 oracle 数据库的方法和步骤,最后给出测试结果。至于使用程序的方式连接,则是后续要实施的工作。
一、引言
之前在 Windows 实现了连接 oracle 数据库,本次尝试在 docker 容器中连接数据库,这样,正在用 Golang 开发软件就可在 Windows 和 Linux 上运行了,部署和使用都方便。
二、技术小结
- 下载 oci 压缩包
- 解压 oci 包,并设置连接参数
- 进入容器连接数据库
三、实践过程
3.1 linux OCI下载
OCI的官方下载地址为:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html , 注意,需要注册登录才能下载。本文使用的压缩包名称及校验码如下所示:
1 | cksum * |
3.2 oci安装
将 oci 压缩包拷贝到/home/latelee/tools/oracle/
,分别解压之:
1 | unzip instantclient-basic-linux.x64-12.1.0.2.0.zip |
解压后得到目录目录为instantclient_12_1
,在该目录创建文件tnsnames.ora
,内容如下:
1 | foo = |
注:根据实际情况修改 oracle_test(表示链接名)、HOST(主机)、PORT(端口)、SERVICE_NAME(数据库服务名)三字段值。
文中将 oci 存储到目录/home/latelee/tools/oracle/instantclient_12_1
,是为了方便多个容器映射使用。当然也可以将 oci 的文件放到 docker 镜像中,但笔者认为不太好,故不采用。
3.2 在容器中验证
在主机中拷贝依赖库到容器中,本文中使用的sqlplus
命令依赖于动态库libaio.so.1
,因此拷贝之:
1 | sudo cp /lib64/libaio.so.1.0.1 /home/latelee/tools/oracle/instantclient_12_1 |
注意,也可将动态库单独拷贝至一 lib 目录,再进行映射,本文图方便就直接放到 oci 目录了。
本文使用 latelee/ubuntu
镜像进行实验。进入容器,命令如下:
1 | docker run -it --rm -v /home/latelee/tools/oracle/instantclient_12_1:/work/instantclient_12_1 --name foo latelee/ubuntu bash |
在容器中设置环境变量:
1 | export ORACLE_HOME=/work/instantclient_12_1 |
在容器中进入/work/instantclient_12_1
目录,执行命令:
1 | ./sqlplus my_db/123456@oracle_test |
提示:
1 | Connected to: |
表示连接成功。
后续将研究如何使用 golang 实现程序方式的连接。